jquery $. когда не работает функция ожидания на главной странице
У меня есть некоторые проблемы, когда я использую функцию jquery.when в веб-форме, используя главную страницу
Это мой код в веб-форме с использованием главной страницы
$(document).ready(function(){
$.when(masterPageFunction()).done(function(){
webFormFunction();
});
})
И это моя главная страница
function masterPageFunction() {
//In this function i call 2 ajax like this
$.ajax({
type: "POST",
url: "/api/master/xxx/",
data: JSON.stringify(obj),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
$.ajax({
type: "POST",
url: "/api/master/xxx2/",
data: JSON.stringify(obj),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
}
})
}
})
}
результат - веб-функция запущена, когда функция главной страницы не выполнена, пожалуйста, помогите, большое спасибо
1 ответ
Ты близко, но when
, then
а также done
функции полагаются на обещания. Вы не возвращаете никаких обещаний в своем коде, поэтому он просто выполняется.
Во-первых, вам нужно получить результат обещания после его завершения в done
функция на вашей главной странице. Мы сделаем это, добавив response
параметр для обратного вызова, а затем передать его webFormFunction
,
$(document).ready(function(){
$.when(masterPageFunction()).done(function(response){
webFormFunction(response);
});
})
Далее нам нужно добавить обещание masterPageFunction
и верни это. Вы разрешаете обещание ответом, который хотите отправить обратно done
функция на вашей главной странице. Вот так:
function masterPageFunction() {
// Create the promise
var deferred = $.Deferred();
//In this function i call 2 ajax like this
$.ajax({
type: "POST",
url: "/api/master/xxx/",
data: JSON.stringify(obj),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
$.ajax({
type: "POST",
url: "/api/master/xxx2/",
data: JSON.stringify(obj),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
// Resolve the promise with the response from $.ajax
deferred.resolve(response);
}
});
}
});
// Return the promise (It hasn't been resolved yet!)
return deferred.promise();
}
В этом случае, webFormFunction
не будет вызван, пока не завершится второй вызов ajax, который разрешает обещание.