2011-08-28 21 views
0

我有一個Ajax應用程序,其中有代碼是這樣的Ajax調用:如何停止超時使用JQuery

$.ajax({ 
type: "GET", 
url: "data.txt", 
beforeSend:function(){ 
}, 
success:function(response){ 
just update responsed data; 
} 
}); 

此調用是由每一秒,它只是從「data.txt中更新的最新數據'正在使用cron作業在服務器上進行更新。現在因爲它只是每秒更新最新數據的功能,所以我會對最新的ajax調用更感興趣;那麼如何終止已超過4秒但尚未完成的舊ajax呼叫,以便減少服務器流量。如果使用'data.html'或'data.php'而不是'data.txt',任何建議都會提高應用程序性能?哪個Web服務器可以執行比Apache更好的Ajax驅動應用程序?我急需這些幫助;請幫忙。

+0

很少有使用情況下,你需要撥打電話的每一秒。就個人而言,我會延遲到大約5(取決於情況)。 – Bojangles

+0

你也可以看看https://github.com/RobertFischer/JQuery-PeriodicalUpdater/(免責聲明 - 它是建立在我做了前一段時間的工作) –

回答

0

我不知道你是怎麼把它設置的時刻,但也許它會更好地運行你的下一個AJAX調用後的最新一期完成(或返回錯誤)。所以它會是這樣的:

(function updateData() { 
    $.ajax({ 
     type: 'GET', 
     url: 'data.txt', 
     beforeSend: function() { 
      // Do stuff 
     }, 
     success: function(response) { 
      // Handle response 
      updateData(); 
     } 
    }); 
})(); 

我不知道在改變文件類型是否有任何性能改變。

編輯:如果你只是需要殺死的要求,你可以這樣做,利用該技術解釋here.

0

你可以跟蹤您上次成功更新時間的。

function NowMS() {return parseInt(new Date().getTime())} 

dataLastUpdateT = -Infinity; 

$.ajax({ 
    type: "GET", 
    url: "data.txt", 
    success: function(response){ 
     if (NowMS() > dataLastUpdateT) { 
      use(response); 
      dataLastUpdateT = NowMS(); 
     } 
    } 
} 
0

你可以試試這個:

function getData(){ 
    $.ajax({ 
     type: "GET", 
     url: "data.txt", 
     timeout:4000, 
     beforeSend:function(){ 

     }, 
     success:function(response){ 

     }, 
     error:function(){ 

     }, 
     complete:function() { 
      setTimeout(function(){getData();},1000); 
     } 
    }); 
} 
getData(); 

這樣4秒鐘後Ajax請求超時和重試每秒(無論成功或超時)

也有看看nginx例如,它是速度快,使用較少的內存比Apache處理客戶端連接