JQuery AJAX 请求由于未知原因而表现同步

标签 jquery ajax asynchronous

我有以下代码,我想异步运行,但日志显示它们正在同步运行。

$(".widget").each(function() {
    // snip - url, def, and tempParams defined here
$.ajax({
    url: url, 
    dataType: "jsonp", 
    type: "POST",
    data: {params: tempParams},
    success: function(data) {
        var st = new Date().getTime();
        console.error("Start " + def.name + " @" + st);
        doSomething(data);
        var et = new Date().getTime();
        console.error("End " + def.name + " @" + et);
        console.error("Duration " + def.name + " " + (et-st) + " ms.");
    }
});

控制台输出清楚地显示了按顺序执行的成功函数,而不是异步执行的:

Start f1 @1300738891705
End f1 @1300738891744
Duration f1 39 ms.
Start f2 @1300738892746
End f2 @1300738893280
Duration f2 534 ms.
Start f3 @1300738893282
End f3 @1300738893303
Duration f3 21 ms.
Start f4 @1300738893305
End f4 @1300738893306
Duration f4 1 ms.
Start f5 @1300738893484
End f5 @1300738895609
Duration f5 2125 ms.

想法?我觉得这一定是我忽略的显而易见的事情。

最佳答案

我认为你们都混淆了这两个术语。异步就 AJAX 而言,因此 JQuery 只是意味着 HTTP 请求消息将被发送到 Web 服务器,而不会在客户端造成任何延迟。这些请求很可能会按顺序发布到服务器,但我认为不能保证这一点。我认为您正在考虑线程......

当浏览器的 JavaScript 解释器等待 AJAX 响应时,同步调用可能会导致客户端延迟。

举一个简单的例子,假设您有一个 AJAX 调用来获取给定的美国各州的税率。如果是同步调用,则结帐工具将停止计算,并且任何用户与 Javascript 的交互都不会产生响应,直到收到 AJAX 响应(带有税率)。

在上面的异步情况下,您可以定义一个回调函数,一旦收到 AJAX 响应,该函数将继续计算最终结账价格。

关于JQuery AJAX 请求由于未知原因而表现同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5383247/

相关文章:

javascript - 如何从Json结果中获取值

javascript - 使用 Promise 链接多个异步函数

http - Elixir:Async HTTP 有什么意义?

c# - 等待 this.ShowMessageAsync 在 WPF C# 中不起作用

javascript - 做一个粘性侧边栏?

javascript - 在顶部时隐藏导航

javascript - 如果我想将附加数据附加到元素以进行 JS 检索

jquery - 如何在下拉列表中填充值列表

javascript - 使用 javascript 显示消息成功 :data id empty

ruby-on-rails - 用于更新属性的复选框