【发布时间】:2011-01-28 20:54:01
【问题描述】:
我调用了 twitter API。检索了 100 个帖子 + 一个告诉我要调用的下一页是什么的属性。所以我等了5秒。并调用该下一页,但是第二次回调函数中的JSon结果始终为null...我认为这可能是JQuery问题...
如果你愿意,这里是测试它的代码:
<html>
<head>
<script type="text/javascript" src="./jquery-1.4.2.min.js"></script>
<script>
function test() {
var rqUrl = "http://search.twitter.com/search.json?q=%23apple+OR+%23ipad&rpp=100&callback=?"
callTwitterSearchApi(rqUrl);
}
function callTwitterSearchApi(tiwtterRequestUrl) {
debug("request to twitter : " + tiwtterRequestUrl);
// *** FIRST CALL WORKS GREAT... ***
$.getJSON(tiwtterRequestUrl, callTwitterSearchApi_callback);
}
function callTwitterSearchApi_callback(jsonPostsResults) {
debug("callback");
if (jsonPostsResults == null) {
debug("Why is jsonPostsResults null? If I copy paste the request inside a browser, I get something =(");
return;
}
if (jsonPostsResults.error != undefined && jsonPostsResults.error != "") {
debug("twitter api error");
}
var posts = new Array();
$(jsonPostsResults.results).each(function() {
posts.push(this);
});
debug("Number of posts : " + posts.length);
if (jsonPostsResults.next_page != undefined && jsonPostsResults.next_page.trim() != "") {
debug("calling next request in 5 sec...");
// *** WHEN COMMING BACK FROM THAT LINE, JSON RESULTS == NULL?! ****
setTimeout("callTwitterSearchApi(\"http://search.twitter.com/search.json" + jsonPostsResults.next_page + "\")", 5000);
}
}
function debug(message) {
document.getElementById('debug').innerHTML = message + "\n" + document.getElementById('debug').innerHTML;
}
</script>
</head>
<body>
<input type="button" onclick="test();" value="test" /><br />
<textarea id="debug" cols="80" rows="20"></textarea>
</body>
</html>
所以,在第 20 行,在第二个回调(从 setTimeout 返回)时,参数“jsonPostsResults”总是返回为空......我不知道为什么。如果我在浏览器中复制粘贴第二个请求,它会返回 100 个结果。当使用 setTimeout 调用 Ajax/JQuery 函数时,有人遇到过类似的问题吗?
【问题讨论】:
-
您是否尝试过在 Firebug 中进行调试 - 如果是,它对问题有何说明?
-
是的,我试过了。不多,它在第一次从 setTimeout 调用时弹出回带有 null 参数的 callTwitterSearchApi_callback。我也试图杀死计时器,没什么……奇怪:(