【问题标题】:Ajax not executing asynchronouslyAjax 没有异步执行
【发布时间】: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


【解决方案1】:

所以这就是为什么的答案。

本文的所有功劳归作者所有:

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

【讨论】:

    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2013-01-16
    • 2016-03-23
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多