2016-04-15 65 views
2

我的頁面上有一個表單。當您提交表單時,我會向服務器發送Ajax調用。服務器端是C#asp.netAjax輪詢而另一個Ajax運行

然後服務器上的控制器正在做一些事情並將當前狀態保存到Session中。 ajax呼叫需要大約3分鐘。

所以我想設置一個Ajax輪詢腳本,它將每5秒向服務器發送一個Ajax請求,並從Session讀取當前的統計信息並更新前端。

問題是ajax輪詢調用正在等待,直到第一個ajax完成。

所以,當第一個ajax正在運行,並在服務器端做一些事情並更新Session中的當前狀態時,我想要另一個輪詢腳本,它將在此期間從會話讀取此狀態,但問題在於它只是在等待第一個ajax要做。

這裏有什麼問題。我對會話的瞭解很少,只是無法弄清楚問題所在,以及如何使其發揮作用。

function installation() { 
    var intervalID = setInterval(function() { checkStatus() }, 5000); 
    var data = {//some data}; 

    $.post("/WebDomain/Installation", data, function (result) { 
     clearInterval(intervalID); 
     console.log(result); 
    }); 
}; 

function checkStatus() 
{ 
    $.post("/WebDomain/GetInstallStatus", function (result) { 
      console.log(result.Status); 
    }); 
} 
+0

你有沒有考慮SignalR這個?聽起來很合適:http://www.asp.net/signalr – Elliott

+0

聽起來不錯。我希望我可以使用網絡套接字來實現它。這將是更好的解決方案。但在這種情況下,如果可能的話,我只需要用它來輪詢ajax。 – carpics

+0

您是否在使用SQL進行某些操作?因爲ajax應該是異步的,並且你應該能夠多次調用服務器,問題可能是多個打開的連接(如果使用了SQL)。我不知道我是否不滿 –

回答

0
function installation() { 

     var data = {//some data}; 

     $.post("/WebDomain/Installation", data, function (result) { 
      setTimeout(function(){ checkStatus(); }, 5000); 
     }); 
    }; 

    function checkStatus() 
    { 
     $.post("/WebDomain/GetInstallStatus", function (result) { 
       installation(); 
     }); 
    } 


    $(document).ready(function(){ 

    setTimeout(function(){ checkStatus(); }, 5000); 

    }); 

希望這將有助於

Explanation: after 5sec of your dom is ready checkStatus() will call, 
if success only installation(); will call 
In installation(); success we are again calling checkStatus(). 
now you can check some condition for breaking this iterations