我已经讨论了关于jquery异步AJAX请求的堆栈溢出的许多主题。这是我的代码。
funciton ajaxCall(path, method, params, obj, alerter) {
var resp = '';
$.ajax({
url: path,
type: method,
data: params,
async: false,
beforeSend: function() {
$('.black_overlay').show();
},
success: function(data){
console.log(data);
resp = callbackFunction(data, obj);
if(alerter==0){
if(obj==null) {
resp=data;
} else {
obj.innerHTML=data;
}
} else {
alert(data);
}
},
error : function(error) {
console.log(error);
},
complete: function() {
removeOverlay();
},
dataType: "html"
});
return resp;
}
问题是,当我使用asyn是假的时候,我得到了正确的resp值。但 beforeSend 不起作用。
如果我把async设为true,那么 beforeSend 正常工作,但resp值将无法正常返回,它总是空白。
有没有办法解决这两个问题?我会得到beforeSend函数和resp值。
由于
答案 0 :(得分:1)
使用async:false
并在beforeSend
来电之前手动运行您分配给$.ajax
的功能:
var resp = '';
$('.black_overlay').show();
$.ajax({
...
或者学习如何使用异步任务的回调函数。网上有很多很好的教程。
答案 1 :(得分:0)
resp
变量
respHasChanged()
resp = data;respHasChanged();
答案 2 :(得分:0)
你可以这样重组,(为什么不以异步方式使用它?)
function ajaxCall(path, method, params) {
return $.ajax({
url: path,
type: method,
data: params,
beforeSend: function() {
$('.black_overlay').show();
},
dataType: "html"
});
}
调用您的javascript文件
ajaxCall(YOUR_PATH, YOUR_METHOD, YOUR_PARAMS)
.done(function(data) {
console.log(data);
// DO WHAT YOU WANT TO DO
if (alerter == 0 && obj !== null) {
obj.innerHTML = data;
} else {
alert(data);
}
}).fail(function(error) {
console.log(error);
}).always(function() {
removeOverlay();
});