AJAX异步:非Mozilla浏览器中的阻止进度对话框

时间:2014-02-13 15:30:38

标签: jquery ajax

作为对潜在的无序AJAX呼叫完成的创可贴修复,我的购物车提供商最近将“async:false”卡入购物车计算代码中。这具有防止在非Mozilla浏览器上显示jquery进度对话框的副作用。因此,那些用户坐在那里,没有反应的页面认为某些内容被破坏,而正在计算运费和销售税。

以下是他们告诉我的事情:

  

“其他浏览器中的Ajax调用会阻止javascript ui事件。   Firefox允许ui对话框显示,即使它已经存在   稍微推迟,ajax开始“

我可以重构他们的代码并链接AJAX调用,但我真的不想对他们的代码进行那么多的手术。

还有其他方法可以让它发挥作用吗?

1 个答案:

答案 0 :(得分:0)

将async设置为false肯定会导致此问题。前几天我遇到了同样的问题。拥有动画和同步请求的唯一方法是使用window.setTimeout()插入暂停。这并不理想,因为它会增加执行的强制性延迟。此外,您可能会看到动画在同步请求运行时停止并启动。

如果你想让代码异步工作,我建议这样:

$("#form").submit( function (event) {
    $("#dataToIterateThru").each( function (i, val) {
        event.preventDefault();
            $.ajax({
                url: 'http://mytargeturl.com/?parameter=' + val,
                type: 'GET',
                dataType: 'html',
                context: $("<span>", {id: 'ajax-'+i}).appendTo($("#output")),
                success: function (data) {
                    $(this).replaceWith(data.value);
                }
            });
        });
    });
});

如果你没有抓住它,context属性会为回调函数创建一个占位符,以便稍后引用(使用$(this))。您也可以只为context使用序列号(例如1,2,3,4),并将数据与数字一起发送到“处理”功能。每次调用该函数时,它将按顺序处理它所拥有的数据,在序列号丢失时停止。有趣的是,这与TCP用于无序数据包的方法几乎相同。