如何确定`.post`请求是否已经启动并在jquery中完成
有没有办法确定.post
请求是否已经开始和完成。
我的意思是,如果我有一个代码:
$.post('address.php', { value: value }, function(data) { alert(data); });
我怎么知道我开始显示加载图像并在完成所述.post
请求后隐藏加载图像。
我知道有一种方法可以完成这项工作,因为大多数网站都使用这种算法。 我想用jQuery
编写它。
有什么输入?
AJAX请求总是立即启动,因此您只需要知道它何时完成。 您的加载程序可以在发送请求之前显示。
如果您需要知道它是成功还是失败,更好的方法之一是以下。
// Show your loader image $("#loader").show(); $.post("address.php", { value: value }).done(function() { // Only on success (HTTP status code < 400) alert("Success!"); }).fail(function() { // Only on errors (HTTP status code >= 400) alert("Error :("); }).always(function() { // Hide your loader image. // Will always happen, after .done()/.fail() were fired. $("#loader").hide(); });
请求立即启动,因此您可以在调用$.post()
之前显示加载程序。
调用$.post()
将返回一个promise ,所以你可以这样做:
// Show your loader $("#myloader").show() $.post('address.php', { value: value }, function(data) { alert(data); }) .always(function() { // Hide it again when the request is complete $("#myloader").hide(); });
这在$.post()
的jQuery API文档中有记录。
如果你使用$ .ajax而不是$ .post($ .post只是一个简写的Ajax函数),你可以使用beforeSend
和complete
回调(或成功回调 – 尽管如果这个回调可能没有执行错误)到包含在ajax调用本身内显示和隐藏加载图标的逻辑,例如:
$.ajax({ type: 'POST', data: { value : value }, url : 'address.php', beforeSend : function() { $("#myloader").show(); }, complete : function() { $("#myloader").hide(); }, success : function(data) { console.log('success'); } });
这里是jQuery文档的Ajax部分的链接,因此您可以更详细地阅读有关回调和其他可用选项的信息。 http://api.jquery.com/jQuery.ajax/