【问题标题】:Cancel getJSON after pending request x seconds待处理请求 x 秒后取消 getJSON
【发布时间】:2021-01-05 11:55:39
【问题描述】:

我正在使用此代码加载广告网络:

$.getJSON('https://server.ads.io/api/v1/decision/?publisher=xx-com&ad_types=text-v1&format=jsonp', function (data) {
    $('#ea-wrapper').html(data.html);
});
    

https://server.ads.io 加载时间过长的情况下,浏览器将等待广告ad aeternum。我正在寻找的是一种在等待 3 秒而没有响应的情况下取消 getJSON 的方法。知道如何实现吗?

【问题讨论】:

  • 您可以使用$.ajax 和使用setTimeoutabort x 秒后的请求 - 免责声明:请求只会被取消 从客户端取消 - 服务器端可能仍在加载它在后台 - 仅供您参考
  • @AlwaysHelping 没关系。我的问题只是客户端。您能否详细说明解决方案?
  • 使用 ajax 加载而不是 getJSON。 Ajax有超时参数
  • @anvd 我的回答解决了这个问题吗?
  • @AlwaysHelping 我稍后会尝试更多。我会尽快批准,因为它有效

标签: javascript jquery getjson


【解决方案1】:

您可以手动 abort 我评论中提到的请求。

您需要将getJSON 设置为variable,并在三秒后在setTimeout 中调用variable 以向abort 提出请求。

setTimeout(function(){
  //kill the request
   adRequest.abort()
}, 3000) //3 seconds

你可以尝试的最终代码是这样的:

var adRequest = $.getJSON('https://server.ads.io/api/v1/decision/?publisher=xx-com&ad_types=text-v1&format=jsonp', function(data) {
  $('#ea-wrapper').html(data.html);
});

setTimeout(function() {
  //kill the request
  addRequest.abort()
}, 3000)  //3 seconds

如果你想使用$.ajax,你可以使用原生timeout方法

$.ajax({
  url: 'https://server.ads.io/api/v1/decision/?publisher=xx-com&ad_types=text-v1&format=jsonp',
  type: 'GET',
  dataType: 'jsonp',
  success: function(data) {
    $('#ea-wrapper').html(data.html);
  },
  timeout: 3000 //3 seconds
});

【讨论】:

    猜你喜欢
    • 2018-07-12
    • 2019-11-13
    • 1970-01-01
    • 2020-11-05
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多