2012-05-21 83 views
0

不知道我是否正確解決了我的問題,但是我擁有下面的代碼。基本上想做一個ajax請求,檢查回調,並重新執行ajax,直到它獲得所需的響應(在示例connectedvoter == 1)。減緩阿賈克斯呼叫/ xhr請求的最佳方式

問題是它只需要80ms,並且xhr的數量在這個速度下非常快速地達到大數。我試圖想出一種'暫停'的方式,但是我能想到的所有事情都是吃掉了cpu。

有沒有辦法'減慢'提出的請求數量,說一次或兩次,而不吃掉cpu?

var connctedvoter = 0; 
var govoters = function() { 
     $.ajaxSetup({ 
      async: false 
     }); 
     var url = "getconnectedvoter.php"; 
     var data = { 
      userid: userid 
     }; 
     $.getJSON(url, data, callback); 
    }; 
var pausevoters = function() { 
     console.log("pausing ajax voters"); 
    }; 
var callback = function (response) { 
     if (response.error) { 
      return; 
     } 
     if (response.connectedvoter == 0) { 
      setTimeout(govoters, 150); 
      //govoters(); 
     } else { 
      $('#vanid').html(response.vanid); 
      $('#name').html(response.name); 
      $("#mapurl").attr("src", response.mapurl); 
      $('.call').fadeIn(); 
      return; 
     } 
    }; 
//DO THIS TO START 
setTimeout(govoters, 150); 
pausevoters(); 

回答

2

只是增加了超時延遲:

if(!response.connectedvoter) { 
    setTimeout(govoters, 2000); // instead of 150 
} 

而不是一秒鐘10個請求:

setTimeout(govoters, 150); // one request every 150 millisecond. 

注意,對於開始你可以從這個改變:

//DO THIS TO START 
setTimeout(govoters, 150); 

要這樣:

//DO THIS TO START 
govoters(); 

是不是真的需要這裏的超時。

+0

哈,很好,很容易...謝謝大概應該已經意識到! –

0

只是改變行使用此代碼:

setTimeout(govoters, 150); 

有:

setTimeout(govoters, 1000); // 1 second