2013-02-05 57 views
0

大家好我有一個getjson調用,並想知道如何檢查其響應(siteContents),如果它是空的,或者如果它沒有所需的字符串(例如查找seasonEpisode =)然後再次調用getjson。我們可以調用從在它的getJSON本身我的目標是得到getjson.Hope正確的反應,你們幫me.Thanks如何繼續調用getjson直到它沒有空響應?

$.getJSON('http://www.mysite.com/doit.php?value=55?', function(data){ 
    //$('#output').html(data.contents); 

var siteContents = data.contents; 
+0

調用同一個確切的url是否返回不同的結果?聽起來不太RESTful –

+0

感謝您的回覆。有時調用這個php url帶有空的響應,或者getjson根本沒有完成! – user1788736

回答

1

試試這個:

var handler = function(data){ 
    //$('#output').html(data.contents); 
    var siteContents = data.contents; 
    if (!siteContents) { 
     $.getJSON('http:/...', handler); 
     return; 
    } 
    // handle siteContents 
} 

$.getJSON('http://...', handler); 

編輯:上面會的垃圾郵件服務器在siteContents爲空的情況下重複嘗試 - 創造無限循環和高負荷。我會建議兩個改進:

1)統計你做了多少重複的空的siteContents循環。在某個失敗閾值(例如20次嘗試)後,用錯誤消息(如果適用)取消循環。

2)使用setTimeout(function() { $.getJSON(...) }, delay)進行迭代,其中延遲時間爲重試之間等待的毫秒數。

0

聽起來更好的問題是爲什麼你的服務器沒有在第一次嘗試時返回'正確'的響應?或者像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調用不會讓自己跑得太快。

+0

當傳遞給setTimeout包裝getJSONRecursive在一個惱人的函數,否則你正在調用它,並將返回值傳遞給setTimeout ... – Iftah

+0

啊,[右](https://developer.mozilla.org/en-US/docs /DOM/window.setTimeout),我的不好。固定。 –

相關問題