如何检查多个$ .post已被发送并且已在页面上获取结果

时间:2017-08-03 08:09:56

标签: javascript jquery

在我的javascript代码中,当有人更改选项并单击Go时。它是多个项目的更改属性。我看到每个项目的保存按钮和编辑按钮。

所以我在更改选择和点击Go后手动点击了按钮。

for (var i = 0; i < checked.length; i++) {
        var cur = checked[i];
        $(cur).parents('tr').find('.transaction-category-wrapper .select2').val(catId);
        $(cur).parents('tr').find('.transaction-verify-wrapper .btn-save').click();
    }

现在问题是我要刷新页面,但确保响应已经到达页面。我怎么能实现它。

我正在考虑实现setTimeout,但如果服务器没有执行并且超时只是刷新页面,那么它不是一个好选择。

jQuery是否有一些属性让我知道javascript请求已经完成并且已收到响应。

$(document).on('click', '.btn-save', function () {
                 // val logic

                $.post("/Entries/AddEntries", val, function (r) {
                    enableTooltip();
                });
            });

2 个答案:

答案 0 :(得分:1)

您可以使用.then来处理AJAX请求的成功和失败案例:

$.post("your_url", { ... })
  .then(function() {
    // If succeeded
  }, function() {
    // If failed
  });

.post返回一个jQuery deferred对象,可以使用.then()处理程序进行响应。 .then的第一个参数被视为成功处理程序,第二个参数是失败处理程序。

如果有多个AJAX调用,您可以使用$.when在所有AJAX调用完成后执行操作。

$.when($.post( ... ), $.post( ... ))
  .then(function() {
    // If all AJAX calls succeed
  }, function() {
    // If any of the call fails
  });

答案 1 :(得分:1)

因为每次点击都会生成一个帖子请求。您需要跟踪数组中的所有请求,然后等待它们解决。因此,您的代码应如下所示:

var requests = [];
$(document).on('click', '.btn-save', function () {
             // val logic
            requests.push($.post("/Entries/AddEntries"));
        });
Promise.all(requests).then((data) => {do something});