不推荐使用jQuery.ajax()方法的异步选项,现在怎么办?

Juw*_*Juw 49 ajax mobile jquery

在jQuery 1.8中,使用async:falsejQuery.ajax()弃用.
但是,在后台正在进行的AJAX通信中,您在"加载屏幕"中看到了多少个网页?我可能已经看过数千个.

我的情况是我正在编写一个需要加载语言文件的移动应用程序.在开始时,我加载语言文件,然后从语言文件中检索按钮和其他GUI元素的文本.

这对我来说真的很糟糕.因为如果缺少语言文件,则不应出现GUI.那么我该如何解决呢?把我所有的代码放在success回调中?这对我来说似乎不是一个好的编码实践.我可以用另一种方式解决吗?

Jør*_*n R 34

解决方案是手动添加覆盖以防止用户与界面交互,然后在完成AJAX查询后将其删除.

$(function() {
    show_overlay();        

    $.ajax({
        // Query to server
    }).done(function() {
        // Verify good data
        // Do stuff
        remove_overlay();
    });
});
Run Code Online (Sandbox Code Playgroud)


Inf*_*igo 29

我在票证中看到了关于这个参数弃用的官方讨论,这是我所理解的:

  • 问题是为同步AJAX 实现Promise s(1)会给它们带来开销.

  • 有许多实际的同步AJAX用例,例如在页面卸载之前保留状态.因此,此功能将保留,但您使用它的方式可能会改变.

  • 最近的溶液(降落在1.8?)是只支持回调(但不承诺),当asyncfalse.

总结:async: false如果必须继续使用,但要注意其缺点(阻止VM).不用担心,如果此功能被删除,您将获得替代方案$.ajax().

  • @ user2867288,页面卸载是一个事件,当用户尝试关闭浏览器选项卡/窗口时会发生这种情况."保留状态"可能意味着很多事情:自动保存表单数据,告诉服务器用户交互已完成,提交一些分析数据(例如用户在页面上花了多少时间).确实有一个用例 - 这就是创建[Beacon API](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon)的原因.当它具有适当的crossbrowser支持时,不需要同步AJAX. (4认同)