如何确定`.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函数),你可以使用beforeSendcomplete回调(或成功回调 – 尽管如果这个回调可能没有执行错误)到包含在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/