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);
});

输出“hello”和“world”(按顺序)。但如果稍微改变一下,那么 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选项为 false,它会发送同步 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 语法错误,单选按钮上的表达式无法识别

javascript - 如何在不冲突的情况下进行多个json请求

ajax - JQuery Ajax 调用通常无法在 Safari 6 上运行

javascript - 获取 Action Controller 未知格式错误-用于 rails 4 + 不显眼的 javascript 和 AJAX 调用

javascript - PHP 下载 zip 文件在直接调用时有效,但不能从 Web 应用程序调用

javascript - Ajax调用php未找到,404错误

javascript - 防止在 Asp.Net Core ViewComponents 中加载多个 JavaScript 脚本

jquery - 兄弟div隐藏时绝对位置内容消失

javascript - Dojo TabContainer 没有样式

javascript - 小书签不起作用