【发布时间】:2017-03-23 20:52:04
【问题描述】:
在这个for循环里面,我希望强制它先运行AJAX代码块。有了结果(即 data.LocationId),我想将其保存在服务器上,然后在 i 减小的情况下运行循环。
如果你看到我的 console.log,我希望它是:
异步进程
data.LocationId 7615
异步进程
data.LocationId 7614
异步进程
data.LocationId 7613
但实际上是:
异步进程
异步进程
异步进程
data.LocationId 7615
data.LocationId 7614
data.LocationId 7613
如何做到这一点?
这是我的代码:
for (i = projectAreaSet.length-1; i >= 0; i--)
{
function asyncProcess(geometry)
{
console.log("asyncProcess");
var deferred = new Deferred(); //Dojo, not jQuery
var locationProfile = { ProjectId: projectId }
$.ajax({
type: "POST",
data: JSON.stringify(locationProfile),
url: "api/LocationProfile/Create",
contentType: "application/json",
})
.success(function (data)
{
LocationIdSet.push(data.LocationId);
console.log("data.LocationId ", data.LocationId);
var currentProjectGraphic = new esri.Graphic(geometry, newSymbol, attributes =
{ "ID": data.LocationId, "Type": 1}, null);
var currentLayer = that.map.getLayer("Project");
currentLayer.applyEdits([currentProjectGraphic], null, null);
deferred.resolve();
});
return deferred.promise;
}
var saveProject = asyncProcess(projectAreaSet[i]);
}
【问题讨论】:
-
这个代码块试图完成什么?您想并行还是按顺序运行这些 ajax 调用(每个调用似乎不依赖于前面的调用,所以看起来它们可以并行运行)?作为结果,你想从
for循环中得到什么? -
谢谢!只有两个目的:Ajax POST 将数据保存在数据库中,applyEdits 方法将几何图形保存在 ArcGIS Server 上。我终于用Sam Onela提供的方法完成了!
-
呃,您不应该将选择的解决方案编辑到您的问题中。在堆栈溢出时,问题应该仍然是问题。答案就是答案。您通过用绿色复选标记标记“最佳答案”来表明您选择了哪个答案。这就是堆栈溢出的工作方式。
-
哦!对不起!这是我第一次......
-
但是有没有地方放最后的可行代码?
标签: javascript jquery ajax asynchronous dojo