Ajax不是异步执行的

时间:2015-08-04 18:42:47

标签: asp.net ajax .net-4.0 long-polling

我有这段代码

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

更新 我正在做的是长轮询,post请求是一个长时间运行的进程,所以我需要知道服务器将触发的一些事件,waitForServerCall方法通知客户端发生的事件。但是,由于$ .get方法在$ .post响应被重新执行后执行,因此通知过程无效。

更新1: 我使用.NET 4.0和Jquery 1.9.1。

是的,$ .get请求首先执行,但在$ .post获得响应之前不会响应。一旦$ .post得到响应,$ .get就能正确执行。但即使$ .post尚未得到任何响应,我也期待$ .get获得服务器响应。

1 个答案:

答案 0 :(得分:0)

所以这就是原因的答案。

所有学分均归本文作者所有:

http://josefottosson.se/c-sharp-mvc-concurrent-ajax-calls-blocks-server/