ajax是異步的,你的代碼會在ajax請求完成之前返回。 有幾種方法可以重構代碼。
您可以傳遞一個回調函數,一旦請求完成就會執行回調函數。
function getSearch(url, callback) {
$.getJSON(url, function(data) {
var out = '';
// btw what is numResults ??
for(var i = 0; i < numResults; i++) {
out += '<p class="hash_list">' + '<a href="http://www.twitter.com/' + data.results[i].from_user + '">' + data.results[i].from_user + '</a>: ' + data.results[i].text + '</p>';
}
if(typeof callback === 'function') callback(out);
});
}
然後,你會使用這樣的功能。
getSearch('test.php', function(out){
// here you can use the out variable
});
或者你可以使用jQuery deferreds返回一個承諾,並通過out變量,當您解決延遲參數的一部分。這裏是一個例子
function getSearch()
{
var deferred = $.Deferred();
$.getJSON(url, function(data) {
var out = '';
// btw what is numResults ??
for(var i = 0; i < numResults; i++) {
out += '<p class="hash_list">' + '<a href="http://www.twitter.com/' + data.results[i].from_user + '">' + data.results[i].from_user + '</a>: ' + data.results[i].text + '</p>';
}
deferred.resolve(out); // resolve the request and pass in the out argument.
});
return deferred.promise(); // return a promise
}
$.when(getSearch()).then(function(out){ // the out variable will get passed in
console.log(out);
});
你的JSON看起來是怎樣的? – Shyju
歡迎來到** async **的精彩世界!你不能那樣做。 – SLaks
@SLaks - 有關解決方法的任何想法? – callmecavs