Javascript 从js循环打开Jquery ui对话框
我正在用JQuery开发一个网站 我遇到了以下问题: 在循环中遍历一个数组,每个值都被发送到一个函数,该函数通过Ajax将其发送到服务器。 成功后,JQuery-Dialog中会生成一条消息,其中按钮和按钮函数由服务器返回的值进行调整 问题是,JQuery对话框仅在循环结束时触发,因此我无法判断哪个消息引用了哪个值 循环函数:Javascript 从js循环打开Jquery ui对话框,javascript,jquery,ajax,sync,jquery-dialog,Javascript,Jquery,Ajax,Sync,Jquery Dialog,我正在用JQuery开发一个网站 我遇到了以下问题: 在循环中遍历一个数组,每个值都被发送到一个函数,该函数通过Ajax将其发送到服务器。 成功后,JQuery-Dialog中会生成一条消息,其中按钮和按钮函数由服务器返回的值进行调整 问题是,JQuery对话框仅在循环结束时触发,因此我无法判断哪个消息引用了哪个值 循环函数: $('#List').find('option').map(function () { semelO= $(this).val(); **getData*
$('#List').find('option').map(function () {
semelO= $(this).val();
**getData**("Insert_hashala", "Inserthashala", false, "***setAlert***", false, "inserthasala", ["semelO", semelO], null, "RefershLendGrid", null);
});
函数签名:
function **getData**(procAlias, funcName, empytFields, ***onSuccessEvent***, isAsync, dataGroup, moreValues, onFailure, setDisplay, onFailureEvent)
阿贾克斯
jQuery.ajax({
type: "POST",
contentType: 'application/json',
dataType: "json",
url: "SvcSifria.asmx/" + funcName,
data: dataJsonString,
success: function (data) {
if (onSuccessEvent != undefined) eval(***onSuccessEvent*** + '(data)');
if (setDisplay != undefined) eval(setDisplay + '(data)');
},
async: isAsync
});
}
对话框功能:
function ***setAlert***(data, error) {
myJson = jQuery.parseJSON(data.d);
text = data.d;
$("#dialog:ui-dialog").dialog("destroy");
$("#dialog-mess").dialog({
autoOpen: false,
modal: true, appendToBody: true,
buttons: [{
text: textButton,
id: "cancle",
click: function () {
$(this).dialog("close");
},text: textButton,
id: "ok",
click: function () {
getData("Insert_hashala", "Inserthashala", false, "setAlert", isAsync, "inserthasala", [returnValue, "true", "sumHashala", sumHashala, "semelOtek", semelOtek], null, "RefershLendGrid");
$(this).dialog("close");
}
}]
});
$("#ok").focus();
$("#dialog-mess").dialog("open");
}我不明白你到底想干什么。但是问题应该是.map不会等待ajax成功完成。因此,我认为您需要创建一个数据结构库,在ajax成功的基础上执行addToQueue之类的操作,然后在所有ajax完成后逐个处理队列。无论您执行其他操作,您都不需要使用
eval
。只需将setAlert
函数作为参数传递给处理程序,然后将其作为onSuccessEvent(data)
调用即可。类似地,只需调用setDisplay(data)
,而不是eval(setDisplay+'(data)
。