javascript - 如何减慢 Ajax 调用速度?

标签 javascript jquery ajax

我在 JS 中有一个函数包含一个循环,每次迭代都会调用 AJAX 调用。调用将 checked 元素插入数据库,并在下一部分的同一页面中返回这些元素的结果。

我遇到的问题是,当我检查例如3 组中有 4 个复选框,最后一组的唯一复选框将添加到页面。但是,当我使用 alert() 时,我可以看到所有元素。

我使用了setTimeout,但代码出现错误。我还添加了一些行,以便为 AJX 调用提供更多时间,但问题仍然存在。所以我想知道是否有一种解决方案可以在不使用 alert() 的情况下减慢代码速度。

这是我的脚本:

addAptitudeField : function(currentAutocompleteField, idChamp) {

    var currentAutocompleteFieldBind = currentAutocompleteField;
    var idChampBind = idChamp;

    window.setTimeout(function() {

        // Code ...

        var paramDwr = {};
        var newDivName = "div" + idChamp + lastValueId;
        paramDwr[attributs.r_divId] = newDivName;
        paramDwr[attributs.r_currentValue] = currentValue;
        paramDwr[attributs.r_hiddenIdsField] = hiddenIdsField.id;
        paramDwr[attributs.r_lastValueId] = lastValueId;
        paramDwr[attributs.r_itemmod] = nbAptitudesCat % 2 == 0;

        // setTimeout ( RepertoireDwr.ligneSuppEtSpanMessage, 1000 ) doesn't work

        RepertoireDwr.ligneSuppEtSpanMessage(paramDwr, function(ajaxPage) {
            divCategorie.update(divCategorie.innerHTML + ajaxPage.texte);
            aptitudeAvecDetail.remetsValeursStockees();
            var btnSuppression = $(newDivName).getElementsByTagName('img')[0];
            btnSuppression.setAttribute("onclick", "formulaireFiche.updateCSS('" + newDivName + "');" + btnSuppression.getAttribute("onclick") + "fiche.updateCategorieSuppressionAptLieeUo(\'divCat" + currentCategorie + "\');"); });
            }
        //
        // alert() : It works in this case.
        //

        // for (var i=0; i<5000000; i++) ; it doesn't work

        }, 400);
    }

预先感谢您的帮助和时间。

最佳答案

我可能会因为提及这一点而被否决,因为这不是推荐的程序,但我相信每个程序员都应该了解所有事实。

在 jQuery AJAX 构造中,有一个选项 async:false, 它将延迟脚本继续运行,直到 AJAX 完成处理。不用说,如果 AJAX 出现问题,浏览器可能会卡住。 很大程度上取决于您的用户是谁以及流量 - 在我的几个十个用户的内部项目中,这是一个可以接受的解决方案。

$.ajax({
    async: false,
    type: 'post',
     url: 'ajax/ax.php',
    data: 'request=',
    success: function(d){
        if (d.length) alert(d);
    }
});

引用:

What does "async: false" do in jQuery.ajax()?

<小时/>

但是,更好的想法是使用 .when().then() 等方法研究 Promises 接口(interface)

引用文献:

https://jsfiddle.net/v86bc028/2/

http://jqfundamentals.com/chapter/ajax-deferreds#

http://digitizor.com/jquery-html-callback-function-using-promise/#

how does jquery's promise method really work?

关于javascript - 如何减慢 Ajax 调用速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37398455/

相关文章:

javascript - MongoDB如何将子文档的属性聚合分配给父文档

javascript - Handlebars ,访问每个循环变量的父级

javascript - 生成随机的绿色阴影

php - 使用 Jquery Ajax 从 Mysql 中检索数据

javascript - append() 不是 ajax 数据字符串中的函数 jQuery

javascript - 如何检测用户是否拥有来自网站的移动应用程序并打开该应用程序

javascript - 如何将客户端渲染的 HTML 插入 DOM

jquery - 单击视频外部时,如何使 YouTube 视频停止播放?

javascript - 根据鼠标位置自动滚动 div

javascript - 在 Chrome 应用中设置 XHR header 'Referer'