2012-05-24 59 views
0

任何人都可以看到這個代碼的問題?當退出時,它的值爲「」。我不知道爲什麼,也許這是關於我不知道的getJSON函數的東西。追加到getJSON中的字符串

我想通過一個URL到這個函數,讓它執行getJSON的URL,並添加結果(我也格式化)到一個文本字符串。我希望他們都在一個文本字符串,所以我可以用正則表達式解析字符串。任何幫助表示讚賞,謝謝!

function getSearch(url) { 
var out = ''; // output variable 

$.getJSON(url, function(data) { 
    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>'; 
    } 
}); 

return out; 
} 
+0

你的JSON看起來是怎樣的? – Shyju

+1

歡迎來到** async **的精彩世界!你不能那樣做。 – SLaks

+0

@SLaks - 有關解決方法的任何想法? – callmecavs

回答

2

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); 
}); 
+1

+1延遲:-) –

2

AJAX是異步

你需要使用一個回調函數返回值,以同樣的方式getJSON作用:

function getSearch(url, callback) { 
    $.getJSON(..., function() { 
     ... 
     callback(...); 
    }); 
} 
+0

你能提供一個例子嗎?或鏈接閱讀更多?品牌新的這個東西,剛剛開始JavaScript的前幾天= X – callmecavs

1

$.getJSON是異步的。這意味着在AJAX調用完成之前返回out

您無法從AJAX調用中返回任何內容,您需要在$.getJSON的回調中添加處理out的所有代碼。

我建議將回調函數傳遞給你的函數。事情是這樣的:

function getSearch(url, callback) { 
    var out = ''; 
    $.getJSON(url, function(data) { 
     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); // call your callback with data 
     } 
    }); 
} 

現在,而不是期望從getSearch返回值,你把它的回調。

getSearch('http://example.com/myurl', function(data){ 
    // this function will get called sometime in the future, 
    // once $.getJSON is done, "data" will be the "out" from the AJAX call 
});