javascript - jQuery 的 AJAX 执行顺序

原文 标签 javascript jquery ajax

我有这段代码(ajax 是异步的):

function echoHello()
{
    return "hello";
}

function echoWorld()
{
    return $.ajax({
        //this will return "world";
    });
}

console.log(echoHello());

$.when(echoWorld()).done(function(response)
{
    console.log(response);
});
输出“你好”和“世界”(按此顺序)。但是如果稍微改变一下,那么console.log()顺序不同:
function echoHello()
{
    return "hello";
}

function echoWorld()
{
    return $.ajax({
        //this will return "world";
    });
}

$.when(echoWorld()).done(function(response)
{
    console.log(response);
});

console.log(echoHello());
是否保证相同的输出?或者它可能会输出“ world ”然后是“ hello ”?

最佳答案

$.ajax() 返回 jqXHR实现 Promise 接口(interface)的对象。如果 async选项为假,它发送 同步 Ajax 请求并返回 已解决 promise 。
对于 $.when()如果参数既不是 Deferred 也不是 Promise 也不是 Thenable,它返回一个 已解决 promise 。
所以下面的例子将打印“Sync”、“Hello”、“World”、“Async”。
JSFiddle

jQuery(document).ready(function( $ ){
    let echoHello = () => "Hello";
    let echoAsync = () => $.ajax({url: "data:text,Async"});
    let echoSync = () => $.ajax({ async: false, url: "data:text,Sync" });

    let log = response => console.log(response);

    $.when(echoAsync()).done(log); // logs "Async"
    $.when(echoSync()).done(log); // logs "Sync"
    $.when(echoHello()).done(log); // logs "Hello"
    console.log('World'); // logs "World"
});
而且,为了您的信息,从 jQuery 1.8 开始,不推荐使用 async: false 和 jqXHR。

关于javascript - jQuery 的 AJAX 执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63025405/

相关文章:

javascript - 使用键时无法获取 d3 选择的更新数据

javascript - 多个 JavaScript worker

javascript - Firefox OS 内容安全策略错误 Index.html 中基于 XHR 的应用程序?

ajax - Laravel 中的三种不同方法用于请求是否请求 JSON。他们是一样的吗?有重叠吗?

javascript - 从Ajax发布请求访问Node.js服务器上的字符串

javascript - 在触摸开始时将类添加到正文而不是 .scroll()

javascript - 如何注销 facebook - 在 rails 应用程序中使用代码(Ruby on Rails Omniauth)

javascript - 在javascript中单击另一个按钮后激活按钮

javascript - Kendoui treeview expand 清除选中的节点

javascript - 使用 jQuery 检查所有 div 是否被隐藏