聽起來更好的問題是爲什麼你的服務器沒有在第一次嘗試時返回'正確'的響應?或者像NuclearGhost指出的那樣,爲什麼它會針對同一請求返回不同的響應?
但是要完成你所要求的,需要遞歸。你不能在循環中執行它,因爲響應是異步的。但是,如果你命名一個功能,你可以調用成功處理程序的功能,這樣的事情:
function getJSONRecursive(maxRetries, count) {
if(!count) count = 1;
if (count > maxRetries) {
alert('Giving up after '+count+' retries.');
return;
}
$.getJSON('http://www.mysite.com/doit.php?', function(data) {
if(!data || !data.contents || data.contents.indexOf('seasonEpisode') == -1) {
getJSONRecursive(++count, maxRetries);
} else {
$('#output').html(data.contents);
}
})
}
然後調用它是這樣的:
getJSONRecursive(5);
我不建議沒有計數做,否則如果正確的響應不會返回,則會溢出堆棧。如果你正在避免的情況是服務器超時或過載問題,那麼我建議把遞歸調用的超時,像這樣:
if(!data || !data.contents || data.contents.indexOf('seasonEpisode') == -1) {
setTimeout(function() { getJSONRecursive(++count, maxRetries)}, 5000);
// etc.
此等待呼叫之間額外的5秒,但額外的時間將有助於確保您的服務器不會受到抨擊,並且您的getjson調用不會讓自己跑得太快。
調用同一個確切的url是否返回不同的結果?聽起來不太RESTful –
感謝您的回覆。有時調用這個php url帶有空的響應,或者getjson根本沒有完成! – user1788736