jQuery的AJAX我有一些我需要他們的任務是在順序逐個執行:即成一個
function doTasks(tasks, urlDoTask) {
// Create a deferred for each task by calling doTask().
var deferreds = $(tasks).map(function (i, task) {
return doTask(task, urlDoTask);
}).toArray();
// return a composite deferred which will wait for each of the doTask requests.
return $.when.apply($, deferreds);
}
function doTask(task, urlDoTask) {
return ajax({
url: getRootDir() + urlDoTask,
data: { param: task.SomeParam },
type: 'POST',
dataType: 'json'
}).then(function (data) {
return ok(createObject("status", "ok", "op", "doTask", "task", task, "data", "passed"));
},
function (data) {
return ok(createObject("status", "fail", "op", "doTask", "task", task, "data", "failed"));
});
}
function ok() {
return newPromise("resolve", arguments);
}
function newPromise(type, args) {
return $.Deferred(function (dfd) {
dfd[type].apply(dfd, args);
}).promise();
}
function createObject() {
var ob = {};
// copy all the arguments name/value pairs into the object
for (var i = 0; i < arguments.length; i += 2) {
var n = arguments[i];
var v = arguments[i + 1];
ob[n] = v;
}
return ob;
}
如何修改這個代碼,以使每個doTask,以便一個被執行一個?我曾想過使用jQuery隊列,但如何在這裏應用?也許做類似這樣的事情:
var deferreds = $(tasks).map(function (i, task) {
$({}).queue(doTask(task, urlDoTask));
}).toArray();
並且每個任務完成後,執行next()?
@charlietfl我需要的數據,從每個任務加工成下一個任務,例如,如果我有TASK1,TASK2和TASK3我想是爲了執行它們,我的意思是,爲了發送jQuery的AJAX調用在這個例子中,首先發送task1,當task1完成時,發送task2,當task2完成時,發送task3。 – user304602
行,所以你不想要數組延遲,那麼你正在使用'地圖'....你需要處理一個延遲一次...這基本上已經在那裏使用'.done()'在' $ .ajax' as other sugegst – charlietfl