【发布时间】:2018-08-24 02:01:46
【问题描述】:
我正在开发一个 asp.net 网络表单应用程序。在客户端,我有一个 javascript for 循环,它在代码隐藏中调用 PageMethod。如果 PageMethod 成功执行,我必须执行附加的 javascript 功能,例如更新标签的值。问题是当for 循环运行并调用PageMethod 时,它永远不会转到onSuccess 方法。循环只是继续并结束。我想知道如何在每个 PageMethod 调用之后调用 onSuccess 方法,然后循环继续进行下一次迭代。以下是我的代码 sn-p。
for (var i = 0; i < data.length; i++) {
var dataItem = datata[i];
var name = dataItem.name;
if (name !== null && name !== '') {
PageMethods.ProcessName(name, onSuccess);
function onSuccess(result) {
if (result == "") {
// code to populate a label with the value of name
// in each iteration
}
}
}
}
【问题讨论】:
-
为什么一定要在循环内定义
onSuccess函数?还有,调用onSuccess时result参数的值是多少? -
如果 PageMethod 有错误,结果会有一些价值。如果我将 onSuccess 函数移到 for 循环之外,它会调用循环执行的次数。问题是我必须为每次迭代获取“名称”值。但是,onSuccess 在循环之外,我只得到最后一次迭代的“名称”值!
-
这是从循环中调用异步方法的常见且经过充分讨论的问题。使用闭包
(function(n){PageMethods.ProcessName(n, onSuccess);})(name);onSuccess必须在循环外定义。
标签: javascript jquery asp.net