wait for a jquery ajax callback from calling function
我已经回顾了很多这类问题的答案,现在我对最好的方法感到困惑。 考虑到最新的jquery,我想要
在调用函数(doAjax)中,如何等待回调然后完成成功或错误的处理(在这种情况下,它成功清除表单,出错时保持原样)
感谢任何建议,
艺术
[编辑]
你们发现有一个错字,应该是doAnAjax而不是doAjax
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | $(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; } }); } |
你必须使用回调函数。 试试这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | $(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 } }); |
如前所述,使用Callbacks。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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'); } ); |
然后,您可以将任何函数传递给
答案是你没有,但它很容易实现。 AJAX的想法是它是异步的,因此是A JAX。 这意味着最初调用ajax的函数不会等待它完成,而是在ajax调用应该在成功或错误处理程序中完成所有工作。
如果你需要同步的东西,你可以将你的标志从
在jquery中查看'derferred'。 下面的示例使用deferred.done,异步关闭,似乎对我有用。
1 2 3 4 5 | $.ajax({ url:"http://www.whatever.com/whatever", async: false }).done(function( data ) { alert(data); //or whatever }) |