【发布时间】:2017-10-30 12:36:19
【问题描述】:
我有一个功能,点击按钮会从甘特图中获取所选任务的所有 id,并运行一个 for 循环来保存我使用 AJAX 请求在表单中编辑的每个所选任务。
现在关于 AJAX 请求 success 的问题我添加了一个代码来清除并再次在甘特图中加载所有数据,但它没有按预期进行,多次加载数据并开始创建相同数据的副本在我的甘特图中,我尝试在循环之外执行 gantt.load 函数,但它仍然无法正常工作。
那么如何创建一个条件,在循环完成后重新加载甘特图?非常感谢任何帮助。
下面是我的代码:
HTML
<button type="button" class="btn btn-primary" onclick="editForm()">Edit</button>
javascript
function editForm() {
var selected_task = gantt.getSelectedTasks();
for (var i = 0; i < selected_task.length; i++) {
var task = selected_task[i];
var data = gantt.getTask(task);
$.ajax({
type: 'PUT',
url: '/api/dashboard/workorder_detail/' + data.workorder_id + '/',
data: postData,
success: function () {
$('#edit_form_modal').modal('hide');
gantt.clearAll();
gantt.load("/api/scheduler/{{ selected_project.id }}/?format=json", "json");
},
error: function (err) {
alert("Failed because of " + err);
}
})
}
}
【问题讨论】:
-
AJAX调用是异步的,因此您不能期望同步代码for等待异步代码完成,因为您在代码执行时没有结果,因此您必须等待结果,我建议使用Promises来实现它,因为它可以让您等待所有异步代码并在有结果时执行函数
标签: javascript jquery ajax