循环内的Ajax请求将浏览器挂起?

时间:2019-02-11 04:07:13

标签: jquery ajax paging

我想从具有大量数据的服务器获取结果。因此服务器将数据发送到多个页面中。所以我想让所有这些显示在数据表中。所以我在循环内使用ajax请求,因为我想从很多页面中获取。我为页面变量添加+1,这样循环将获取所有页面的所有结果,直到响应的元素个数为0。但是问题是执行此请求时浏览器挂起了?还有其他方法可以实现这一目标吗?谢谢。

我尝试哟先获取数据,然后在循环后将它们添加到表中,但浏览器仍然挂起。

$('#corporateComboOfAllCorpTag').change(function () {
let response=1;
let page=0;
$('#tableOfAllCorpTag').DataTable().destroy();
let corpParkStationTable=$('#tableOfAllCorpTag').DataTable({order:[]});
corpParkStationTable.clear();
let corpStations=[];

while (response!=0){

    $.ajax({
        url:corporateTagUrl+corporates[$('#corporateComboOfAllCorpTag').prop('selectedIndex')].corporateId,
        method:"GET",

        data:{
            "size":1000,
            "page":page
        },

        dataType:"json",
        headers: { 'smart-session-key': sessionKey, 'userName': admin},
        async:true,


        success:function (resp) {

            for (let i = 0; i < resp.content.length; i++) {

                corpParkStationTable.row.add($(
                    '<tr><td>'+resp.content[i].tagSerial+'</td><td>'+resp.content[i].tagUid+'</td><td>'+resp.content[i].status+'</td><td>'+resp.content[i].addedBy+'</td><td>'+resp.content[i].addedDate+'</td><td><button class="btn btn-info">More</button></td></tr>'
                )).draw(false);

                corpStations.push(resp.content[i]);
            }

            response=resp.numberOfElements;

        },

        error:function (resp) {
            console.log("Fail "+resp);
        }

    });
    page++;
  }
});

1 个答案:

答案 0 :(得分:1)

如果您设置output_string = input_string[::-1] ,则可以使用,但是某些浏览器会发出警告。

我认为您必须以同步方式编写代码。例如

async: false