【发布时间】:2016-09-20 18:35:28
【问题描述】:
我在 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);
}
提前感谢您的帮助和时间。
【问题讨论】:
-
什么循环?它是如何“不工作”的?你遇到了什么错误?真的不清楚你在问什么,但听起来你肯定是在尝试通过创建不同的问题来解决问题。
-
我已将您的问题挽救为我认为您的意思。请查看我的更正
-
非常感谢@Martijn,是的,这正是我所要求的,我为我的语言感到抱歉。
-
@David 嗯,通常,前面的函数“addAptitudeField”允许按时间处理一个元素,所以我创建了一个调用这个函数的函数:
additems : function () { var nbritem = $('selector').length; for (var i = 0; i < nbritem ; i++) addAptitudeField($('selector').[i]); }就是这样,我每次调用都一样具有特定元素 id 的函数 -
你应该看看 promises。
标签: javascript jquery ajax