2012-08-13 34 views
3

我有點綠,所以請耐心等待。JQuery AJAX輪詢語法

我需要輪詢SharePoint webservice,直到它返回一個值。我相信我已經錯誤地格式化了我的代碼。如果有預先存在的線程解決這個問題,請將它指向我;我相對有限的理解可能使我無法識別它。

function Poll2(){ 
    $.ajax({ 
     //Use an ABSOLUTE reference to your target webservice 
     url: "https://mydomain.com/Sandbox/bitest/_vti_bin/lists.asmx", 
     type: "POST", 
     dataType: "xml", 
     data: soapEnv, 
     success:processResult, 
     complete: Poll2, 
     timeout: 5000, 
     contentType: "text/xml; charset=\"utf-8\"", 
     async: true 
    }); 
} 

我的願望是,它會輪詢服務每5秒鐘,直到成功,此時它會繼續,所有的數據都將被處理的「processResult」功能。我害怕我通過引用父函數創建了一個無限循環。

-------------------編輯&新規範-------------------

我發現了一個解決方案in this blog post大致完成我在找什麼。事實證明,我真的只希望我的請求發射一次。然而,對於一個「無限」的輪詢例程來說,這個工作非常好。

(function poll() { 
    setTimeout(function() { 
     $.ajax({ 
      type: 'POST', 
      dataType: 'json', 
      url: 'http://somewhere.com/rest/123', 
      success: function (data) { 
       MyNamespace.myFunction(data); //DO ANY PROCESS HERE 
      }, 
      complete: poll 
     }); 
    }, 5000); 
})(); 

我會注意,但是,它執行後,這個程序不初始化它的第一個民意調查,直至5秒。簡單的代碼雖然!非常感謝作者。

回答

4

如上所述,在我的編輯注意到我已經找到了解決辦法in this blog post大致完成我正在尋找的東西。事實證明,我真的只希望我的請求發射一次。然而,對於一個「無限」的輪詢例程來說,這個工作非常好。

(function poll() { 
    setTimeout(function() { 
     $.ajax({ 
      type: 'POST', 
      dataType: 'json', 
      url: 'http://somewhere.com/rest/123', 
      success: function (data) { 
       MyNamespace.myFunction(data); //DO ANY PROCESS HERE 
      }, 
      complete: poll 
     }); 
    }, 5000); 
})(); 

但是我會注意到,這個例程不會初始化它的第一次輪詢,直到它被執行5秒之後。簡單的代碼雖然!非常感謝作者。

0

你肯定是對的,已經創建了一個無限循環。

但是你可以檢查一下,如果這個請求需要重新生成或者不重新生成,那麼只需處理數據(如果需要的話)並從Poll2函數返回。

+0

因此,如果嵌套在AJAX方法之上的「if」語句中的「返回」命令可以使我擺脫這種困境?我可以檢查一下這種方法是否成功?原諒我的綠色。 – Shrout1 2012-08-14 13:16:40

1

超時設置告訴jQuery在放棄之前應等待來自服務器的響應的時間。

function Poll2(){ 
    $.ajax({ 
     //Use an ABSOLUTE reference to your target webservice 
     url: "https://example.com/Sandbox/bitest/_vti_bin/lists.asmx", 
     type: "POST", 
     dataType: "xml", 
     data: soapEnv, 
     success:processResult, 
     timeout: 5000, 
     contentType: "text/xml; charset=\"utf-8\"", 
     async: true 
    }); 
} 

如果你想讓它保持每五秒鐘,直到成功嘗試,你可以做這樣的事情:

function Poll2(){ 
    $.ajax({ 
     //Use an ABSOLUTE reference to your target webservice 
     url: "https://example.com/Sandbox/bitest/_vti_bin/lists.asmx", 
     type: "POST", 
     dataType: "xml", 
     data: soapEnv, 
     success:processResult, 
     complete: Poll2, 
     timeout: 5000, 
     contentType: "text/xml; charset=\"utf-8\"", 
     async: true 
     error: function(xhr) { 
      setTimeout(Poll2, 5000); 
     } 
    }); 
} 
+0

丹尼爾,謝謝你的迴應!比方說,我希望這個成功後才能觸發一次。我在這裏編碼了一個「無限循環」嗎?觀察這可能對不斷變化的數據有用;什麼東西運行我的「成功」功能一次,然後終止?再次感謝! – Shrout1 2012-08-14 13:13:39

+1

丹尼爾,最後一個注意:看起來你的答案恰恰是*我所需要的,然而'complete:Poll2'這行使這個函數立即*進入一個無限循環。刪除'complete:Poll2'這行會導致它以我所尋找的方式行事。再次感謝! – Shrout1 2012-08-17 20:02:39