Ajax长轮询无法正常工作
我正在使用MVC 2中的长轮询开发一个简单的陌生人聊天应用程序。如果我打开应用程序不同的浏览器,它在我的开发机器上工作正常..我的意思是如果我在IE和Mozilla中加载应用程序,它工作正常
如果我在浏览器的两个选项卡中使用该应用程序(例如:IE),则不会从两个选项卡中触发长轮询。我的意思是,有一个启动按钮可以启动聊天,从而触发长轮询。 我可以看到它在调试时调用动作..而我的问题是,当我从第一个选项卡中单击启动按钮时,它会触发一个ajax请求(长轮询(此请求在服务器上等待直到另一个请求来))然后我单击在选项卡2中的启动按钮,它不会触发ajax请求,直到从服务器返回第一个请求(超时后)。
为什么会这样? 我阅读像浏览器将阻止多个ajax请求..这是一个原因吗? ..如果我使用不同的浏览器,它的工作正常。只有在同一个浏览器中选择两个选项卡才会出现问题
我读的浏览器会阻止多个ajax请求。
是的,如果您使用会话,ASP.NET会阻止来自同一会话的并发请求。 从文档中引用:
对会话状态的访问是每个会话独占的,这意味着如果两个不同的用户发出并发请求,则同时授予对每个单独会话的访问权限。 但是,如果对同一会话发出两个并发请求(通过使用相同的SessionID值),则第一个请求将获得对会话信息的独占访问权。 第二个请求仅在第一个请求完成后执行。 (如果由于第一个请求超过锁定超时而释放信息的独占锁定,则第二个会话也可以访问。)如果@ Page指令中的EnableSessionState值设置为ReadOnly,则只读请求会话信息不会导致会话数据的独占锁定。 但是,会话数据的只读请求可能仍然必须等待由会话数据的读写请求设置的锁定才能清除。
还要确保已禁用缓存。 例如,如果使用jquery,则在轮询时使用cache: false
选项:
$.ajax({ url: '/poll', cache: false, success: function(result) { // ... } });
- 添加将重定向到JQGrid中当前行的View Page的按钮
- 未捕获的TypeError:无法读取未定义的属性’replace’
- 在具有相同ID的下拉字段列表中,validation下拉项不会出现多次
- 如何设置jQuery Ajax调用以在Asp.Net MVC中的thair请求头中全局注入AntiForgeryToken
- 如何禁用SPA中的默认JQM页面?
- JqGrid内联添加记录保存
- 提交表单是返回application / json而不是text / html
- 使用ASP.NET MVC时,Ajax.BeginForm(…)并不总是有效,完全回发
- “jquery.unobtrusive-ajax.js”过时了吗?