等待来自调用函数的jquery ajax回调

我已经回顾了很多这类问题的答案,现在我对最好的方法很困惑。 鉴于最新的jquery,我想

  1. 调用ajax函数
  2. 做ajax处理(成功或错误)//工作正常
  3. 成功或错误时将状态返回给调用函数以进行进一步处理

在调用函数(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(""); }, 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; } }); } 

你必须使用回调函数。 试试这个:

 $(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(""); }, 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 } }); 

如前所述,使用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函数,并在成功/错误时调用它。

答案是你没有,但很容易实现。 AJAX的想法是它是异步的,因此是A JAX。 这意味着最初调用ajax的函数不会等待它完成,而是在ajax调用应该在成功或error handling程序中完成所有工作。

如果你需要同步的东西,你可以将你的标志从async:true更改为async:false然后它变成一个真正的SJAX调用(甚至不确定该术语存在但是,从技术上来说它不再是一个AJAX调用)。

在jquery中查看’derferred’。 下面的示例使用deferred.done,异步关闭,似乎对我有用。

 $.ajax({ url: "http://www.whatever.com/whatever", async: false }).done(function( data ) { alert(data); //or whatever })