【问题标题】:How do I reload the page after all ajax calls complete?所有 ajax 调用完成后如何重新加载页面?
【发布时间】:2010-10-26 01:49:33
【问题描述】:

当用户第一次访问我的网站时,我会使用几个 ajax 调用从各种来源获取大量信息。 ajax 调用完成后如何重新加载页面?

if(userVisit != 1) {
  // First time visitor
  populateData();
}

function populateData() {
  $.ajax({
            url: "server.php",
            data: "action=prepare&myid=" + id,
            dataType: "json",
            success: function(json) {
                if(json.error) { 
                    return;
                }
                _id = response[json].id;
                getInformation(_id);
            }
  });
}

function getInformation(id) {
  $.ajax({
            url: "REMOTESERVICE",
            data: "action=get&id=" + id,
            dataType: "json",
            success: function(json) {
                if(json.error) { 
                    return;
                }

                $.ajax({
                       url: "server.php",
                       data: "action=update&myid=" + id + '&data=' + json.data.toString(),
                       dataType: "json",
                       success: function(json) {
                                if(json.error) { 
                                    return;
                                }
                      }
                });
            }
  });
}

所以代码的作用是,它获取新用户的预定义标识符列表(populateData 函数)并使用它们从第三方服务获取更多信息(getInformation 函数)。这个getInformation 函数查询第三方服务器,一旦服务器返回一些数据,它就会通过另一个ajax 调用将该数据发送到我的服务器。现在我需要一种方法来确定所有 ajax 调用何时完成,以便我可以重新加载页面。有什么建议吗?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    在您的getInformation() 调用中,您可以在您的success 回调中调用location.reload(),如下所示:

    success: function(json) {
      if(!json.error) location.reload(true);
    }
    

    要等到任何进一步 ajax 调用完成,您可以使用ajaxStop event,如下所示:

    success: function(json) {
      if(json.error) return;
      //fire off other ajax calls
      $(document).ajaxStop(function() { location.reload(true); });
    }
    

    【讨论】:

    • 谢谢。但是,如果在getInformation 函数中的success 回调中对我的服务器的一些ajax 调用仍然挂起怎么办?这不是不考虑就刷新页面吗?还是我错过了什么?
    • @Legend - 是的,如果您想延迟到它们全部完成,只需执行$(document).ajaxStop(function() { location.reload(true); });,它会在所有这些请求完成后执行。
    • 这完全有道理,但由于某种原因,当我插入此调用时,页面一直在刷新。
    • @Legend - 即使在加载用户数据之后,您是否还在运行这些函数?如果是这种情况,它将继续像那样重新加载。
    • 你是对的。我修好了它。非常感谢。完美运行......不过只有一件事......它在 Chrome 中工作,但在 Firefox 中,它像以前一样不断重启......
    【解决方案2】:

    您可以重定向到 server.php 文件中使用 header('Location: html-page'); 定义函数的同一页面;

    【讨论】:

      【解决方案3】:

      .ajaxStop() 对我来说很好,页面在所有 ajax 调用后重新加载。

      您可以使用以下示例:

      $( document ).ajaxStop(function() {
        window.location = window.location;
      });
      

      它是如何工作的? 答:每当一个 Ajax 请求完成时,jQuery 都会检查是否还有其他未完成的 Ajax 请求。如果没有剩余,jQuery 会触发 ajaxStop 事件。

      希望对大家有所帮助,更多信息,我正在分享以下文档的链接。

      来源:https://api.jquery.com/ajaxstop/

      【讨论】:

        【解决方案4】:
        //document.location.reload(true);
        window.location = window.location;
        

        【讨论】:

        • 我可以看到您的意思,但您应该尝试重申您的链接所展示的内容。我猜你的意思是 document.location.reload(true) 在带有 POST 数据的页面上不能按预期工作?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-18
        • 2011-12-14
        • 2017-07-25
        • 2021-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多