Цепной два $ .ajax() вызова следующим образом:Удивляет поведение .ajax() обещает в JQuery
[EXAMPLE 1]
var promise1 = $.ajax({url: remoteUrl, type: 'POST'});
promise1.then(
function() {
$.ajax({url: remoteUrl});
}
);
производит на удаленном сервере, как и ожидалось, следующие события:
ENTER api_ping() ...
.
.
.
leave api_ping() ...
ENTER api_ping() ...
.
.
.
leave api_ping() ...
Однако, используя следующий простой синтаксис:
[EXAMPLE 2]
var promise1 = $.ajax({url: remoteUrl, type: 'POST'});
promise1.then(
$.ajax({url: remoteUrl})
);
секвенциальности теряется:
ENTER api_ping() ...
.
ENTER api_ping() ...
.
.
.
leave api_ping() ...
leave api_ping() ...
с моим большим удивлением, поскольку .then() является цепным и возвращает новое обещание.
Мы могли бы сделать вывод, что если .then() не передается функции, но обещание вместо этого, то новое обещание будет иметь такое же поведение, как и оригинал, а жаль как второй синтаксис далеко если вам нужно последовательно перевести длинный список звонков .
Однако происходят более странные вещи. При использовании GET вместо POST, следующим образом:
[EXAMPLE 3]
var promise1 = $.ajax({url: remoteUrl, type: 'GET'});
promise1.then(
$.ajax({url: remoteUrl})
);
оригинал «правильное» поведение восстанавливается:
ENTER api_ping() ...
.
.
.
leave api_ping() ...
ENTER api_ping() ...
.
.
.
leave api_ping() ...
Я пытаюсь выяснить, разумное объяснение для этого ... предложения?
вы выполняете функцию сразу в вашем 2-ом примере. –
Тем не менее, это не объясняет третий пример: тот же синтаксис, различное поведение –
браузер (или сервер) должен сериализовать запрос GET на тот же uri, чтобы он мог повторно использовать кеш (если это возможно) или другое поведение браузера/сервера. –