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
})
在这段代码中,如果你看得清楚,我已经确定使用了//两个附加语句
其中一个正在工作并输出数组中的数字
但另一个正在输出Undefined
我已经定义了数组,所以它应该取值,但实际发生的是数组在$ .getJSON函数之外变得不可访问。
任何帮助将不胜感激。
谢谢
答案 0 :(得分: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
请查看有关您追加电话的评论()。希望这有帮助!
答案 1 :(得分:0)
您需要在回调函数中追加您的值。现在,两个$ .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
答案 2 :(得分:0)
你永远不会引用f2,所以你可能有一个复制/粘贴错误。你的意思是再次引用f1吗?
顺便说一句,最好像这样初始化数组
var f1=[];
var f2=[];
var common=[];
而不是使用“new Array”。
此外,正如Josh所指出的,Ajax调用是异步的。在进入之前,您不希望依赖数据。
你的$ getJSON调用会立即回来,所以你的程序流程并不像你期望的那样。
jQuery's $getJSON将回调函数作为其第三个参数。您希望在通话后设置一个进行任何处理。
当你使用Ajax编程时,你没有一大块JavaScript,你有一堆事件驱动的代码。