【发布时间】:2015-08-04 18:42:47
【问题描述】:
我有这段代码
function getMesssages(id,c) {
function waitForServerCall(id,c) {
$.get(href("~/polling/" + id), function (response) {
var r = c(response);
if (r) {
return false;
}
waitForServerCall(id);
});
}
waitForServerCall(id,c);
$.post(href("~/batch/export/?batches=3344&pollid=" + id), function (response) {
c(response);
cancelCall = true;
});
}
waitForServerCall 方法中的$.get 只有在$.post 收到服务器响应时才会执行。为什么?
这是 ajaxSettings:
accepts: Object
async: true
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
contents: Object
converters: Object
flatOptions: Object
global: true
isLocal: false
jsonp: "callback"
jsonpCallback: ()
processData: true
responseFields: Object
type: "GET"
url: "http://localhost:59161/"
xhr: In()
__proto__: Object
更新。 我正在做的是长轮询,发布请求是一个长时间运行的过程,所以我需要知道服务器将触发的一些事件,waitForServerCall 方法通知客户端发生的事件。但是由于 $.get 方法会在 $.post 响应被接收后执行,因此通知过程不起作用。
更新 1: 我正在使用 .NET 4.0 和 Jquery 1.9.1。
是的,$.get 请求首先执行,但在 $.post 得到响应之前不会收到响应。一旦 $.post 得到响应, $.get 就会正确执行。但我希望 $.get 能够获得服务器响应,即使 $.post 还没有得到任何响应。
【问题讨论】:
-
请描述您想要实现的行为。您试图描述一个问题,但并没有真正说出您希望它如何工作。另外,在您调用
waitForServerCall(id);后,您似乎遇到了错误,因为您没有传递第二个参数。 -
你怎么知道的?描述的症状没有意义。听起来更像是代码在做所写但不是你所期望的事情
-
请阅读更新
-
您可能需要检查您的服务器是否没有阻止多个 AJAX 请求同时发生。例如,默认情况下,ASP.NET 会阻止使用同一会话的请求,因此一次只允许处理一个。
-
@Misters:首先,分享您正在使用的服务器端技术可能会有所帮助。其次,尝试在浏览器的开发工具中查看网络流量,以查看获取请求是否在发布之前开始,并且在发布完成之后才完成。
标签: asp.net ajax .net-4.0 long-polling