【问题标题】:Preventing AJAX call from timing out防止 AJAX 调用超时
【发布时间】:2017-09-08 21:44:39
【问题描述】:

我的一个网站需要调用我另一个网站的 API。

我计划在页面进行 AJAX 调用以指示服务器端代码进行 API 调用时显示“等待”弹出窗口。

但有可能需要一段时间。我正在寻找有关如何防止 AJAX 调用超时的建议。

当我在谷歌上搜索这个问题时,我读过的大多数文章都建议一次只发送几项。但就我而言,这一切都是在一个相当重要的电话中完成的。

还有哪些其他选项可以防止页面超时?

【问题讨论】:

  • 你试过超时参数了吗?您可以指定超时时间,例如 timeout: 3000 超时 3 秒
  • @PM.:我没想到。如果在服务器繁忙时无法设置某种“ping”,这可能是一个不错的后备方法。
  • 您的意思是,您想在进行 ajax 调用之前检查服务器是否忙,如果忙,则显示等待弹出窗口,如果没有,则进行 ajax 调用?
  • @PM.:不,我只是想知道是否有某种方法可以在服务器进行 API 调用时以某种方式定期 ping 服务器。换句话说,在工作完成时找到某种方式进行来回通信,类似于我一次只发送几件物品时的方式。
  • 为了保持连接活跃,你可以在某个特定的时间间隔调用一些简单的 API,但是在同一个请求中发送几个项目会很困难,而且显然不是一个好的解决方案。您可以为这些特定任务单独调用,并保持一个调用以不时 ping 服务器。

标签: jquery asp.net ajax asp.net-web-api


【解决方案1】:

如果你无法实现数据包等的加载,那么超时可能是你最好的选择。

 $.ajax({
        dataType: "json",
        url: uriTrackers, // Your URL here.
        //data: data,  //we are not sending data, this is a different data to the one below
        timeout: 10000 //10 second timeout  or maybe 30 secs if debugging
    })
            .done(function (data) {
    // Anything you want to do on success here.
            })
        .fail(function (jqXHR, textStatus, err) {
            $('#TrackerInfo').text('Error: ' + err + uriTrackers);

        });

【讨论】:

    【解决方案2】:

    根据 cmets,我知道您需要在某个特定时间间隔内保持服务器 ping。

    setInterval(function() {
      $.ajax({url: "ping.txt", 
              success: function(result){
                           //Nothing to do, or your can check the content of your ping.txt
                        },
              error : function(){
                                   //Code to show your wait popup
                     }
              });
    }, 60000);
    

    这将使您的连接保持活跃,即您会知道您是否连接到服务器。

    您需要将 ping.txt 相应地放在您的服务器上。

    【讨论】:

    • 谢谢,但我不确定这是否满足需求。我认为服务器仍然存在并且无论如何都可以被ping通。这里的问题是执行实际工作的 AJAX 调用可能会超时,我不知道这会如何改变。
    • 哦,好吧,我猜超时参数可以解决问题。
    猜你喜欢
    • 2021-07-05
    • 2014-07-16
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多