qq_26624753 2017-03-16 15:27 采纳率: 100%
浏览 3053
已采纳

ajax同步传输,浏览器响应慢,求解决

附部分代码:

  for(var i=0; i<arr1.length; i++) {
            $.ajax({
                method: 'GET',
                async:false,
                url: '/mainrver/ajax?key=' + arr1[i]
            }).success(function (data) {
                _api_1 = data.data;
                for(var j=0; j<_api_1.list.length; j++){
                    list_all[k]=_api_1.list[j];
                    k++;
                }
            }).error(function () {
                spinner.hintMsg(common.MESSAGE.network_err);
            });
        }
        console.log(list_all.length);

原来async:true时候,console.log(list_all.length);一直是0
改为false,目的可以达到,但是慢到爆

  • 写回答

3条回答 默认 最新

  • Go 旅城通票 2017-03-17 01:53
    关注

    异步的话第一个ajax都没返回就已经执行你的log函数了,获取不到数据。同步的话网速慢浏览器会假死或者没有反应,因为要等待ajax请求完毕,网速慢你请求很多并且服务器处理速度慢基本要假死很久一段时间

    改为异步,并且用一个状态记录住所有请求完毕后再执行log操作

    
        function doAjax(arr1,callback) {
            doAjax.total = arr1.length;//记录总ajax请求数量,下面成功或者失败都-1,位0时再执行回调
            var list_all = [],k=0;///
            for (var i = 0; i < arr1.length; i++) {
                $.ajax({
                    method: 'GET',
                    async: true,dataType:'json',
                    // url: '/mainrver/ajax?key=' + arr1[i],
                    url: 'data.txt'
                }).success(function (data) {
                    _api_1 = data.data;
                    for (var j = 0; j < _api_1.list.length; j++) {
                        list_all[k] = _api_1.list[j];
                        k++;
                    }
                    ////////////////
                    doAjax.total--;
                    if (doAjax.total == 0) callback(list_all);
                    ////////////////
                }).error(function () {
                    ////////////////
                    doAjax.total--;
                    if (doAjax.total == 0) callback(list_all);
                    ////////////////
                    spinner.hintMsg(common.MESSAGE.network_err);
                });
            }
    
        }
    ////////////////////////
        doAjax([1, 2, 3], function (list_all) { console.log(list_all); console.log(list_all.length); });
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀