This question already has answers here:
How do I return the response from an asynchronous call?
(38个答案)
6年前关闭。
我正在尝试访问在函数中设置的变量。我需要在功能之外访问它。我尝试先在函数外部设置变量,然后在函数内部进行更改,但这似乎不起作用。这是我的代码:
注销时,我只会得到一个空字符串。当我从JSON函数中注销时,我得到正确的值。我基本上只是遍历JSON文件并打印出值。
我还尝试了答案在这里(How to store a global value (not necessarily a global variable) in jQuery?)所说的内容,但是尝试以$ .getJSON.location_var的形式访问变量,但这也不起作用。
谢谢你的帮助!
第二个
您可以通过删除内部的
您需要确保从回调中调用依赖于
(38个答案)
6年前关闭。
我正在尝试访问在函数中设置的变量。我需要在功能之外访问它。我尝试先在函数外部设置变量,然后在函数内部进行更改,但这似乎不起作用。这是我的代码:
location_var =""; //i've tried both location_var and var location_var here
$.getJSON('/v/js/round.js', function(data) {
var location_var = "location.pathname.indexOf('/product-p/test-product.htm')"
for(i=0; i<data.records.length-1; i++){
var location_var = location_var + " || location.pathname.indexOf('" + data.records[i].productcode + "')";
}
});
console.log(location_var);
注销时,我只会得到一个空字符串。当我从JSON函数中注销时,我得到正确的值。我基本上只是遍历JSON文件并打印出值。
我还尝试了答案在这里(How to store a global value (not necessarily a global variable) in jQuery?)所说的内容,但是尝试以$ .getJSON.location_var的形式访问变量,但这也不起作用。
谢谢你的帮助!
最佳答案
您的代码有两个问题。
首先-location_var
的范围是内部函数。 For example:
var foo = 1;
(function(){
var foo = 2;
})();
alert(foo); // alerts '1'
第二个
var
创建一个作用域为函数的新变量,而alert
语句正在查看附加到外部作用域的foo
变量。您可以通过删除内部的
var
来解决此问题-但这是一个凌乱的解决方案,会污染全局范围-并且由于代码中的另一个错误而无法使用:getJSON
调用是异步的-即,发送远程请求,然后执行其他代码,然后在收到响应时执行回调函数。换句话说,在您记录该值时,尚未收到响应。您需要确保从回调中调用依赖于
location_var
新值的任何代码,例如:$.getJSON('/v/js/round.js', function(data) {
...code...
console.log(location_var);
});