关于如何在执行代码之前等待ajax完成,有很多例子。这不是我的问题。我的问题是如何实现通用函数的承诺/等待解决方案。
我在脚本中使用了大量重复的ajax调用。我决定把这段代码变成一个通用函数。正如async所预期的那样,我遇到的问题是,代码不会等到ajax完成后才执行下一行代码。
function universalAjax(data) {
var returnedData = false;
$.ajax({
type: 'POST',
url: '/longScript.php',
dataType: 'json',
data: data,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function(result) {
returnedData = result;
},
fail: function(jqXHR, textStatus, errorThrown) {
},
complete: function(res) {
},
error: function(res) {
}
});
return returnedData;
}
function foo(data) {
var result = universalAjax(data);
// executes before above function has finished
alert(result);
}
我知道我可以在
success
但这意味着我有两个函数用于每个实例,我想得到ajax调用的结果。
function universalAjax(data, callbackfunction) {
$.ajax({
type: 'POST',
url: '/longScript.php',
dataType: 'json',
data: data,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function(result) {
callbackfunction(result);
},
fail: function(jqXHR, textStatus, errorThrown) {
},
complete: function(res) {
},
error: function(res) {
}
});
}
function foo(data) {
var result = universalAjax(data, fooCallback);
}
function fooCallback(data) {
alert(data);
}
同样,上面的例子只会调用
成功
.