Мне интересно, почему в моем примере # 1 срабатывает предупреждение в правильном порядке 1, 2, но в примере # 2, где я добавляю вызов ajax, тогда порядок стрельбы становится 2,1. Также может кто-нибудь предложить, как с помощью вызова ajax я мог бы достичь желаемого порядка стрельбы 1, 2 ... Я в тупике.Порядок выполнения jQuery
Пример # 1
uploader.bind('BeforeUpload', function (up, file, policy, sinature) {
//alert('1');
test();
function test() {
alert('1');
}
});
uploader.bind('UploadFile', function (up, file, policy, signature) {
test2();
function test2() {
alert('2');
}
});
Пример # 2
uploader.bind('BeforeUpload', function (up, file, policy, sinature) {
//alert('1');
test();
function test() {
data = { alc: 'private', bucket: 'PhotojimaDev', file: file.name, key: path };
$.ajax({
url: sf.getServiceRoot('photojima') + "Upload/getPolicy",
type: 'POST',
data: data,
beforeSend: sf.setModuleHeaders
}).done(function (response, status) {
if (status == "success") {
policy = response.policy;
signature = response.signature;
alert('1');
}
}).fail(function (xhr, result, status) {
alert("Uh-oh, something broke: " + status);
});
}
});
uploader.bind('UploadFile', function (up, file, policy, signature) {
test2();
function test2() {
alert('2');
}
});
AJAX является по определению асинхронной. Это означает, что он не будет ждать ответа сервера, прежде чем продолжить предупреждение 2. Вы можете решить это, сделав его синхронным (не рекомендуется), добавив задержку для предупреждения 2 или добавив еще один вызов AJAX для предупреждения 2. В большинстве случаев порядок не предсказуем. – bldoron