javascript - 如何使ajax请求异步?

标签 javascript jquery ajax

我想让一些ajax请求异步。 比如两个Ajax,第一个Ajax不需要完成,第二个请求就可以发生,

$.ajax({
            url: "urlone",
            async: true, 
              complete: function () {
                console.log("1");
            }, 
            type: "post",
           dataType: "json"
        });


 console.log("2");

 $.ajax({
            url: "urltwo",
            async: true,
              complete: function () {
                console.log("3");
            },
             type: "post", 
             dataType: "json"
});

在urlone后台,我让线程休眠5秒, 在 urltwo 后台我立即返回 json。

我写了这个,但是没有效果, 我想要控制台打印 2 3 1

但是,实际上,它打印 2 1 3

这表明只有第一个请求返回后才能触发第二个请求

这个问题怎么解决??

2月6日补充:感谢您的热心解答。 我的服务器端是C# 并在乌尔隆 我写的

JsonModel  xx=new JsonModel(){.......};   //as you known
System.Threading.Thread.Sleep(5000);
return Json(xx);

在 urltwo 中 我写的

JsonModel  xx=new JsonModel(){.......};   //as you known
return Json(xx);

就是这样!

我想要这个是因为我在urlone中执行了一个非常耗时的操作, 当我从urlone返回时,前端已经失去响应,即使我设置了很大的ajax等待时间。所以我想通过请求urltwo来查询urlone中的操作是否完成,urltwo是为查询数据库完整字段标志而设计的用于urlone中的操作。 这是我的想法。

但是今天,我发现了一个新问题。 当我休眠后台线程很长时间,然后返回json数据到前端时,前端可以响应并完成一些js功能,但是当我在urlone后台执行一个非常耗时的操作时,当它返回到前端时,前端没有响应。 一定有什么问题我没有意识到, 所以

最佳答案

您说过您希望使请求异步;它们是(并且您不需要 async: true,这是默认值)。

this show the second request can be trigged only after the first request return

不,它表明第一个在第二个之前完成,而不是第二个在第一个完成之前才触发。

如果您在重复测试中可靠地看到 2 1 3,则说明以下两件事之一:

  1. 第一个请求本质上比第二个请求处理得更快 - 但如果您将 urlone 的处理暂停五秒钟(并且您已经验证那个),那么就不是这个了

  2. 服务器正在序列化它们

服务器可能会出于多种原因对它们进行序列化;这些原因取决于您所使用的服务器端技术和配置。例如,一些服务器将序列化对同一“ session ”中动态生成内容的请求。

关于javascript - 如何使ajax请求异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28317884/

相关文章:

angularjs - 在 AngularJS 中缓存 HTTP 'Get' 服务响应?

c# - Ajax 到 WCF,无法将 Ajax 加载到对象中

Javascript Date toString 转换并格式化为本地时间

javascript - 从动态构建的表单提交时,ajaxForm 正在发送空 POST

javascript - 即使关闭 ui 对话框后,jquery 验证消息仍然可见

javascript - 为什么复选框在取消选中时不在 onchange 上提交任何数据

javascript - 通过 AJAX 单击按钮更新表单值

javascript - 尝试在循环中等待对象的元素

javascript - 位置为 :fixed leaves gray trail after scrolling 的传单

javascript - jQuery 在滚动时加载更多数据