在Javascript问题变量的作用域(Scope of variable in Javascrip

2019-10-16 19:52发布


var query1 = urlencode($('input[name="searchTerm1"]').val()); //user1
var query2 = urlencode($('input[name="searchTerm2"]').val()); //user1
var rpp = 20; //number of tweets to retrieve out
var c=0;
var f1=new Array();
var f2=new Array();
var common=new Array();
$.getJSON('http://twitter.com/followers/ids.json?screen_name='+ query1 + '&callback=?', 
        function(data) {
                                 f1=data;

            $('#content').append('p'+f1[0]+'p');//this one is coming
            });
$.getJSON('http://twitter.com/followers/ids.json?screen_name='+ query2 + '&callback=?', 
        function(data1) {
                                  f2=data1;
                });
$('#content').append('p'+f1[0]+'p');//this one is not coming...its showing Undefined
})

在此代码,如果你看到清楚我一直在使用// 2追加语句确定

它们中的一个工作,阵列中输出该数

但另一种是未定义的输出

我已经定义数组所以应该取值,但实际上寺发生的是数组的$ .getJSON函数外部无法访问。

任何帮助将不胜感激。

谢谢

Answer 1:

@anand,$ .getJSON()以异步方式检索JSON数据。 你回调函数的目的是,一旦JSON已经从异步请求接收到的执行工作。 我将简化你的榜样一些:

var query1 = urlencode($('input[name="searchTerm1"]').val()); //user1
var query2 = urlencode($('input[name="searchTerm2"]').val()); //user1
var rpp = 20; //number of tweets to retrieve out
var c=0;
var f1=new Array();
var f2=new Array();
var common=new Array();

$.getJSON('http://twitter.com/followers/ids.json?screen_name='+ query1 + '&callback=?', 
    // 1st callback
    function(data) {
        f1=data;

        // We know that f1 has been assigned, so unless the Twitter API
        // returns an empty Array, f1[0] will not be Undefined.
        $('#content').append('p'+f1[0]+'p');//this one is coming
});
$.getJSON('http://twitter.com/followers/ids.json?screen_name='+ query2 + '&callback=?', 
    // 2nd callback
    function(data1) {
        f2=data1;
});

// This statement may be executed before 1st callback and therefore
// f1 may still be an empty Array causing f1[0] to return Undefined.
$('#content').append('p'+f1[0]+'p');//this one is not coming...its showing Undefined

请查看评论关于您的来电追加()。 希望这可以帮助!



Answer 2:

您需要在回调函数中添加你的价值观。 现在,你的两个$ .getJSON后的代码行调用JSON下载完成之前被解雇。 这就是为什么第一个追加的工作。 你有一个时机的问题。

为了说明这个时机,用这样的警报消息...

$.getJSON('http://twitter.com/followers/ids.json?screen_name='+ query1 + '&callback=?', function(data) {
    f1=data;
    alert('Two');
    $('#content').append('p'+f1[0]+'p');//this one is coming                
});

$.getJSON('http://twitter.com/followers/ids.json?screen_name='+ query2 + '&callback=?', function(data1) {
    f2=data1;
    alert('Three');
});

alert('One');
$('#content').append('p'+f1[0]+'p');//this one is not coming...its showing Undefined


Answer 3:

你永远不引用F2,所以你可能有一个复制/粘贴错误。 您的意思是再次引用F1?

顺便说一句,这是更好地初始化这样的数组

var f1=[];
var f2=[];
var common=[];

而不是使用“新阵”。

此外,由于乔希指出,Ajax调用是异步的。 你不想靠过来的数据,直到它的用武之地。

目前您的$的getJSON调用会回来马上,所以你的程序流程是不是你似乎会发生什么。

jQuery的$的getJSON需要一个回调函数作为其第三个参数。 你要设置一个呼叫后做任何处理。

当你使用Ajax编程,你不会有一个很大的一段JavaScript代码,你有一大堆的代码事件驱动件。



文章来源: Scope of variable in Javascript problem