2010-01-07 77 views
1

我正在用jquery做一個簡單的遊戲,我想調用asp.net web服務,我知道該怎麼做,但服務器調用需要繼續運行直到我得到服務器的特定響應。無限循環等待2秒,讓服務器調用jquery

我會像等待3秒鐘,每個循環週期

function servercall() { 
      while (true) { 
       // code for clone and insert ... 
       $.ajax({ 
        type: "POST", 
        url: "Server.asmx/HelloWorld", 
        data: "{'name': '" + $('#name').val() + "', 'time': '2pm'}", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function(msg) { 
         AjaxSucceeded(msg); 
        }, 
        error: AjaxFailed 
       }); 
       setTimeout("nothing", 2000); 
      } 

     } 
+3

有問題嗎? – 2010-01-07 18:34:15

+0

你問如何讓一個無限循環運行2秒? :)我希望我知道該怎麼做! – 2010-01-07 18:41:18

+0

我想他想要在每次迭代之間延遲一個循環。沒有登山者的山,使用遞歸。看到我的答案。 – 2010-01-07 18:45:42

回答

3

使用setTimeout遞歸。並確保在收到響應時啓動計時器,以便解決網絡延遲問題(您不希望大量請求同時發生)...

function servercall() { 
    $.ajax({ 
    complete: function(xhr) { 
     var msg = xhr.responseText; 
     if(xhr.statusCode == 200) 
     AjaxSucceeded(msg); 
     else 
     AjaxFailed(msg); 

     setTimeout(servercall, 2000); //recursion magic 
    } 
    }); 
} 
-1

設定的時間間隔更有幫助的:

<script type='text/javascript'> 

setInterval("servercall()", 2000); 

function servercall() { 

       // code for clone and insert ... 
       $.ajax({ 
        type: "POST", 
        url: "Server.asmx/HelloWorld", 
        data: "{'name': '" + $('#name').val() + "', 'time': '2pm'}", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function(msg) { 
         AjaxSucceeded(msg); 
        }, 
        error: AjaxFailed 
       }); 

      } 

     } 

</script> 
+0

如果他們的互聯網速度很慢,每次響應需要一秒鐘的時間會怎麼樣? – 2010-01-07 18:41:25

+2

其中一個人必須考慮的事情,如果一個人已經決定了一個無限循環的AJAX調用。他問了2秒我給了他兩秒鐘。 – Zaje 2010-01-07 18:46:21

+0

我要說的是,這可能會一次執行多個請求,這是永遠不需要的。 – 2010-01-07 18:49:40