我需要从Javascript中调用一些C#函数(将一些值保存到数据库中),因此我使用多个PageMethods来执行此操作。我想在完成所有这些操作后向用户显示警告。但是我无法理解在Javascript中执行脚本的顺序。
所以这就是我所拥有的(简化):
var savedchanges = false;
function saveFields(){
for (var i = 0; i < polygons.length; i++) {
alert("Just before saving polygon");
PageMethods.saveCoordinates(arguments, onpolygonsaved, onerror);
}
alert("After everything");
if (savedchanges == true) {
alert("The changes have been saved");
}
}
function onpolygonsaved(result){
savedchanges = true;
alert("OnPolygonsaved");
for (var i = 0; i < points.length; i++) {
if (points[0].polygonnum == result[0]) {
PageMethods.saveSamplePoints(arguments, onpointsaved, onerror);
}
}
}
function onpointsaved(pointresult){
savedchanges = true;
alert("OnPointSaved");
}
这样做的方式是,有'n'个多边形,并且在每个多边形内部,有一定数量的点。最初,我认为这是它的进展:
PageMethods.saveCoordinates - &gt; onpolygonsaved - &gt; PageMethods.saveSamplePoints - &gt; onpointsaved - &gt;返回saveFields函数。
因此,如果我根据savedchanges的值在saveFields()中的pagemethod之后发出警报,它将在保存所有点之后向用户显示警告。
但它并没有这样的方式。所以我在不同的位置发出警报,以检查它是如何进展的。假设有两个多边形,这是警报出现的顺序:
事实上,如果我不想象事情,每次尝试时这个顺序都不同,即使每种情况下多边形/样本点的数量相同。
为什么会发生这种情况,以及如何做我想做的事情?