我已经回顾了很多这类问题的答案,现在我对最好的方法感到困惑。鉴于最新的jquery,我想
在调用函数(doAjax)中,如何等待回调然后完成成功或错误的处理(在这种情况下,它成功清除表单,出错时保持原样)
任何建议,
艺术 的 [编辑] 你们发现有一个错字,打电话应该是doAnAjax不做阿贾克斯
$(function () {
doAnAjax(Url, data, function (myRtn) {
if (myRtn == "success") {
resetForm($('#myForm'));
resetForm($('form[name=addChlGrp]'));
} else {
$('.rtnMsg').html("Opps! Ajax Error");
}
});
});
function doAnAjax(newUrl, data) {
$.ajax({
url: newUrl,
async: true,
dataType: 'html',
beforeSend: function () {
$('.rtnMsg').html("<img src=_cssStyleImg_-A-loading.gif>");
},
type: "GET",
data: data,
cache: false,
success: function (data, textStatus, xhr) {
$('.rtnMsg').html(data);
myRtnA = "Success"
return myRtnA;
},
error: function (xhr, textStatus, errorThrown) {
$('.rtnMsg').html("opps: " + textStatus + " : " + errorThrown);
myRtnA = "Error"
return myRtnA;
}
});
}
答案 0 :(得分:18)
你必须使用回调函数。请尝试以下方法:
$(function() {
// I think doAjax should doAnAjax()
// here you're passing callback
// but you're not using it doAnAjax()
doAnAjax(Url, data, function(myRtn) {
if (myRtnV == "success") {
resetForm($('#myForm'));
resetForm($('form[name=addChlGrp]'));
} else {
$('.rtnMsg').html("Opps! Ajax Error");
}
});
});
// pass callback as third parameter to doAnAjax()
function doAnAjax(newUrl, data, callBack) {
$.ajax({
url: newUrl,
async: true,
dataType: 'html',
beforeSend: function() {
$('.rtnMsg').html("<img src=_cssStyleImg_-A-loading.gif>");
},
type: "GET",
data: data,
cache: false,
success: function(data, textStatus, xhr) {
$('.rtnMsg').html(data);
myRtnA = "Success"
return callBack( myRtnA ); // return callBack() with myRtna
},
error: function(xhr, textStatus, errorThrown) {
$('.rtnMsg').html("opps: " + textStatus + " : " + errorThrown);
myRtnA = "Error"
return callBack ( myRtnA ); // return callBack() with myRtna
}
});
答案 1 :(得分:4)
如前所述,使用Callbacks。
function process(url, params, successCallback, errorCallback) {
$.ajax({
success : successCallback,
error : errorCallback,
data : params,
url : url,
type : 'POST',
dataType : 'json'
});
}
process(
'http://www.google.co.uk',
{
param1 : 'a'
},
function(resp) {
alert('Success');
},
function() {
alert('Uh oh');
}
);
然后,您可以将任何函数传递给process
,并在成功/错误时调用它。
答案 2 :(得分:2)
答案是你没有,但它很容易实现。 AJAX的想法是它是异步的,因此 A JAX。这意味着最初调用ajax的函数不会等待它完成,而是在ajax调用应该在成功或错误处理程序中完成所有工作。
如果你需要同步的东西你可以将你的旗帜从async:true
更改为async:false
但是它真的变成了一个SJAX调用(甚至不确定该术语存在但是,从技术上来说它不是一个AJAX调用了)。
答案 3 :(得分:0)
在jquery中查看'derferred'。下面的示例使用deferred.done,异步关闭,似乎对我有效。!
$.ajax({
url: "http://www.whatever.com/whatever",
async: false }).done(function( data ) {
alert(data); //or whatever
})