2016-04-15 67 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