1

有没有办法确定.post请求是否已经开始和完成。

我的意思是,如果我有代码:

$.post('address.php', { value: value }, function(data) {
    alert(data);    
});

我怎么知道它已经开始显示加载图像并在完成所述.post请求后隐藏该加载图像。

我知道有一种方法可以做到这一点,因为大多数网站都在使用这种算法。我想把它写在jQuery.

有什么输入吗?

4

3 回答 3

2

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();
});
于 2013-07-18T09:22:36.763 回答
0

如果您使用 $.ajax 而不是 $.post(无论如何 $.post 只是一个简写的 Ajax 函数),您可以使用beforeSendandcomplete回调(或成功回调 - 尽管如果出现错误,此回调可能不会执行)来包含在 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/

于 2013-07-18T09:33:35.007 回答
0

请求会立即启动,因此您可以在调用之前显示加载程序$.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().

于 2013-07-18T09:19:17.257 回答