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,目的可以达到,但是慢到爆

异步的话第一个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); });

那就把arr1中的数据一起传到后台啊,只请求一次不就可以了吗。不过后台要有相应的服务

 首先,async:true,是异步处理,可以不等待后台响应完成;而async:false是同步处理,说明你后台处理这个请求的逻辑耗时长,或者是否存在问题。
调试建议:1)浏览器F12,看看这个请求是否正确发送,js是否有错误 2)后台Action打断点,看看是否存在死循环耗时过长的问题。