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