同步Ajax请求“锁定”浏览器

退出

我有几个jQuery Ajax请求,它们必须是同步的,但是它们会一直锁定/冻结浏览器,直到收到响应为止。我的主要问题是,在收到响应之前,我必须显示一个旋转的图标,但是由于冻结,因此无法显示微调器,即使它奇迹般地也没有动画。

这是显示微调框并发送请求的事件:

$(document).on('click', '#open-button', function () {

    var input = "some text";
    var wrapper = $('#wrapperWindow');
    wrapper.children().animate({
        opacity: 0
    }, 500);
    wrapper.children().remove();
    wrapper.append('<div id="loading-spinner" style="display:none;"></div>');
    var spinner = $('#loading-spinner');
    spinner.css({
        backgroundImage: 'url("img/loading.gif")',
        opacity: 0
    });
    spinner.show();
    spinner.animate({
        opacity: 1
    }, 500);

    var dataForTab = requestData(input); //<-- the request

    if (dataForTab.length > 0) {
        //do stuff
    }

});

要求:

function requestData(input) {

    var result = null;

    $.ajax({
        async: false,
        type: "POST",
        url: "/some/url?input=" + input,
        dataType: "json",
        retryLimit: 3,

        success: function (json) {
            result = json;
        },

        error: function (xhr, err) {
            console.log(xhr);
            console.log(err);
        }
    });

    return result;
}

直到请求返回接收到的JSON数据,一切都停止移动请问该如何解决?

KooiInc

这就是同步请求的本质,它们是锁定的。您可能希望尝试将请求移至Web Worker这是一个示例(不使用XHR,但可以为您提供实现想法)

Web worker是在单独的文件中实现的,脚本如下所示:

onmessage = function (e) {
var result = null;

    $.ajax({
        async: false,
        type: "POST",
        url: "/some/url?input=" + input,
        dataType: "json",
        retryLimit: 3,

        success: function (json) {
            result = json;
            postMessage({result: result});
        },

        error: function (xhr, err) {
            postMessage({error: err});
        }
    });

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

异步Ajax请求锁定浏览器

来自分类Dev

异步Ajax请求锁定浏览器

来自分类Dev

window.onbeforeunload,关闭浏览器和同步AJAX

来自分类Dev

浏览器是否批处理大量的ajax请求?

来自分类Dev

浏览器是否批处理大量的ajax请求?

来自分类Dev

为什么浏览器阻止特定的Ajax请求?

来自分类Dev

浏览器同步未将CSS注入浏览器

来自分类Dev

如何检测文件被浏览器锁定?

来自分类Dev

如何检测GET请求是来自AJAX请求还是浏览器请求?

来自分类Dev

Gulp浏览器同步-通过代理重定向API请求

来自分类Dev

为什么有2个Ajax调用时浏览器会锁定?

来自分类Dev

Gulp浏览器同步代理

来自分类Dev

chrome csp阻止了浏览器同步

来自分类Dev

Angular SPA的浏览器同步

来自分类Dev

SystemJS,浏览器同步设置

来自分类Dev

Gulp浏览器同步ENOENT错误

来自分类Dev

无法启动浏览器同步

来自分类Dev

Angular SPA的浏览器同步

来自分类Dev

无法启动浏览器同步

来自分类Dev

设置Gulp浏览器正确同步

来自分类Dev

为什么我可以通过正常的浏览器请求得到Ajax请求的响应?

来自分类Dev

Http请求多浏览器麻烦

来自分类Dev

安全浏览器扩展API请求

来自分类Dev

来自浏览器的重复请求

来自分类Dev

安全浏览器扩展API请求

来自分类Dev

浏览器 URL 和 HTTP 请求

来自分类Dev

请求 html 页面与浏览器不同

来自分类Dev

如何检查浏览器中是否有待处理的请求(Ajax及其变体)

来自分类Dev

MVC Ajax.BeginForm-成功获取请求后,在浏览器中更新URL