0

我正在尝试访问我在函数中设置的变量。我需要在函数之外访问它。我尝试先在函数外部设置变量,然后在函数内部对其进行更改,但这似乎不起作用。这是我的代码:

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 文件并打印出这些值。

我还尝试了这里的答案(如何在 jQuery 中存储全局值(不一定是全局变量)?),但尝试以 $.getJSON.location_var 的形式访问变量,但这也不起作用。

谢谢你的帮助!

4

2 回答 2

3

您的代码有两个问题。

首先 - 的范围location_var是内部功能。例如

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);
});
于 2013-09-10T00:36:12.243 回答
0

尝试这个:

$.getJSON('/v/js/round.js', function(data) {

    window.location_var = "location.pathname.indexOf('/product-p/test-product.htm')"

    for(i=0; i<data.records.length-1; i++){     
        location_var = location_var + " || location.pathname.indexOf('" + data.records[i].productcode + "')";
    }

    console.log(location_var);

});
于 2013-09-10T00:35:49.120 回答