how to wait for an ajax call to return
我正在尝试使用JQuery,虽然我在努力成功等待ajax调用成功然后执行更多代码。 有没有办法等待ajax打电话? 我见过一些例子,但似乎只是盲目地等待x秒钟?
谢谢,
詹姆士
是的,您可以同步请求:
1 2 3 4 5 6 7 8 9 10 11 12 | var bodyContent = $.ajax({ url:"script.php", global: false, type:"POST", data: {id : this.getAttribute('id')}, dataType:"html", async:false, success: function(msg){ alert(msg); } } ).responseText; |
资料来源:http://api.jquery.com/jQuery.ajax/
但是,同步请求是一个倒退,因为JS引擎(在某些浏览器中,用户界面)将阻塞,直到请求完成。 Douglas Crockford曾写过关于同步请求的文章:
Synchronous programming is disrespectful and should not be employed in applications which are used by people.
看看jQuery deferreds。您不能暂停此操作,但可以在AJAX调用返回后调用其他代码。
1 2 3 | // No way to stop. $.ajax(...); doSomething(); |
但是通过延期,您可以:
1 2 3 | $.ajax(...).success(function() { doSomething(); }); |
看到这篇文章。
http://www.erichynds.com/jquery/using-deferreds-in-jquery/
jQuery的ajax方法有一个成功的处理程序。
您应该将您想要触发的代码放在附加到此处理程序的方法中。
考虑jQuery网站上给出的示例:
1 2 3 4 5 6 7 | $.ajax({ url:"test.html", context: document.body, success: function(){ $(this).addClass("done"); } }); |
你可以在这里看到有一个附加方法的
正如其他答案和下面的评论中所指出的,您现在可以使用延迟而不是这个简单的
您可以使用成功或完整的回调。如果服务器返回200,则会触发成功。无论响应状态如何,完成将在请求完成时触发。
1 2 3 4 5 6 7 8 9 | $.ajax({ url:"/path/to/action", success: function() { alert("do something if it's successful"); }, complete: function(request, status) { alert("do something when it's finished, regardless of success."); } }); |
或者你可以做同步通话:
1 2 3 4 | $.ajax({ url:"/path/to/action", async: false }); |
您必须在"成功"功能中插入代码:http://api.jquery.com/jQuery.ajax/