当我在使用母版页的网页表单中使用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) {
}
})
}
})
}
结果是主页功能未完成时web功能正在运行 请帮忙,非常感谢你
答案 0 :(得分: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调用完成,这将解决这个承诺。