首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JQuery在Chrome中搁置和等待ajax请求

JQuery在Chrome中搁置和等待ajax请求
EN

Stack Overflow用户
提问于 2015-01-18 13:25:43
回答 5查看 46K关注 0票数 24

偶尔,我在应用程序中的Ajax调用(通过JQuery 1.8)会被状态“挂起”很长一段时间(有时长达17分钟)。我在谷歌上搜索过,所有可能的解决方案都没有奏效:

  1. 我没有安装广告拦截程序。
  2. 我在Chrome中禁用了“预测网络操作以提高页面加载性能”标志。
  3. 我还向Ajax调用中添加了一个查询字符串,以使其惟一(禁用任何Chrome缓存锁定)。

你知道怎么解决这个问题吗?

在下面的示例中,请求挂起了17分钟(通过Fiddler验证,请求只在17分钟后发送)。

代码语言:javascript
代码运行次数:0
运行
复制
   GET http://www.mywebsite.com/foo/rest/publishers/1/packages?_=1421584749323    HTTP/1.1
   Host: www.mywebsite.com
   Connection: keep-alive
   Accept: application/json, text/javascript, */*; q=0.01
   X-Requested-With: XMLHttpRequest
   User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36    (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
   Content-Type: application/json
   Referer: http://www.mywebsite.com/foo/client/home
   Accept-Encoding: gzip, deflate, sdch
   Accept-Language: en-US,en;q=0.8,he;q=0.6,ru;q=0.4
   Cookie: JSESSIONID=C668509B5AFCDEBE9C9774C4721AFB9D;
   aaassz="ddss"

见图:

EN

回答 5

Stack Overflow用户

发布于 2016-06-20 17:01:05

我偶然发现了同样的问题。一旦我残疾:

使用预测服务更快地加载页面

高级设置->隐私->约第3复选框,一切都开始工作,它应该。我无法重现这个错误。

jquery/ajax计票器在火狐中运行得很好。它只在Linux和Windows上进行Chrome测试。

这不是一个完美的解决方案,因为它不会影响全球意义上的用户--但也许你与我有限的受众处于同样的情况。

票数 8
EN

Stack Overflow用户

发布于 2015-05-06 05:51:23

你可以试试这个。

现在用实际的工作代码更新

(使用我自己的一些时区代码,所以请原谅对时区的引用)

首先初始化数组并运行请求计数逻辑。

代码语言:javascript
代码运行次数:0
运行
复制
var request = ( typeof request != 'undefined' && request instanceof Array ) ? request : [];
var pendingAjax = ( typeof pendingAjax != 'undefined' && pendingAjax instanceof Array ) ? pendingAjax : [];

使用https://api.jquery.com/ajaxStart/https://api.jquery.com/ajaxStop/跟踪活动请求。

代码语言:javascript
代码运行次数:0
运行
复制
var ajaxActive = 0;
$( document ).ajaxStart(function() {
  ajaxActive++;
  document.ajaxQueueFull = ajaxActive > 5;
});
$(document).ajaxStop(function() {
  ajaxActive--;
  document.ajaxQueueFull = ajaxActive > 5;
}

创建一个函数来构建新的请求

代码语言:javascript
代码运行次数:0
运行
复制
    function ajaxRequestNew(t, u, d, s) {

        var instance = request.length + 1;
        request[instance] = $.ajax({
            method: t,
            url: u,
            data: {ajaxPost: d },
            success: s
        });
        return instance;
    }

现在,创建获取返回实例号的请求。

代码语言:javascript
代码运行次数:0
运行
复制
    var instance = ajaxRequestNew('POST', 
                                  'js/ajax_timezone.php', 
                                  { ajaxAction : "ajaxGetTimezone", 
                                    tzoffset : "0", 
                                    tztimezone: "America/New_York" },
                                    function(data) {  }
    );

函数返回一个$.ajax对象。因此,我们使用while循环来检查ajax何时实际被发送,并在请求停止时中止其他活动请求。

代码语言:javascript
代码运行次数:0
运行
复制
    while(request[instance] === null || (request[instance].readyState < 1 || request[instance].readyState > 4)) {
        if (document.ajaxQueueFull) {
            //abort existing requests
            $.each(request, function(i,v) {
                if (i !== instance) {
                    request[i].abort();
                }
            });
        }
    }

将请求推到堆栈上。

代码语言:javascript
代码运行次数:0
运行
复制
    pendingAjax.push(request[instance]);

为请求创建回调

代码语言:javascript
代码运行次数:0
运行
复制
  var timezoneFailCallback = function(data) {
        console.log('fail');
        console.dir(data);
    };

    var timezoneSuccessCallback = function(data) {
        console.log('success');
        console.dir(data);
    };

使用何时应用回调

代码语言:javascript
代码运行次数:0
运行
复制
    $.when.apply($, pendingAjax).done( timezoneSuccessCallback ).fail( timezoneFailCallback);

这段代码可能需要对你的应用程序做一些调整,但希望你能得到这个想法。如果你有任何问题,请告诉我。

票数 4
EN

Stack Overflow用户

发布于 2018-08-16 18:50:49

我知道这是一条古老的帖子,但我把这条帖子贴给了那些急于找到答案的人。我也得处理这个抓头的问题。我的问题是由于广告阻滞剂阻塞了一个API调用,其中包含了“优惠券”这个词。它在阻止请求的同时保持它的活力。经过几个街区之后,每个请求都会自动进入待定状态,因为有太多(我认为大约有6或7个)实时请求。

在铬地址栏中键入chrome ://internals/#events来检查请求。这将使你对这个问题有一个更清晰的认识。我附上了两张照片,这是我试图弄清楚这件事时拍摄的。

调试器截图

net-内部截图

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28010156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档