如何发送多个AJAX请求并将所有结果异步合并到数组中?

时间:2018-07-07 18:21:17

标签: javascript arrays ajax asynchronous get

我需要通过一个传递ID的ajax请求来获取100个对象,为此,我有一个包含100个ID的数组,但是每次发送的ID不能超过20个,所以我必须将它们20个发送20个,直到我从服务器获取所有数据。 以异步方式执行此操作的最佳实践是什么?

这就是我现在正在测试的方式,我创建了一个全局数组,当我从每个请求中获取数据时,我将该数组连接起来:

window['p'] = [];

function getAllProducts(products) {
    var cont = 0;
    while(cont < products.length){
        (function(cont){
            var req = new XMLHttpRequest();
            var url = '/api/catalog_system/pub/products/search?';

            // concatenate all the id's with the URL
            if (cont === 0){
                url += 'fq=skuId:'+products[0].sku
                for (var i = 1; i < 20; i++) {
                    url+= '&fq=skuId:'+products[i].sku;
                }
            } else {
                for (var i = cont; i < cont + 20; i++) {
                    if (typeof products[i] === 'undefined') {
                        break;
                    }
                    url+= '&fq=skuId:'+products[i].sku;
                }
            }

            req.open('get',url,true);

            req.onreadystatechange = function(){
                if (req.status == 200 || req.status == 206 && req.readyState == '4') {
                    var data = JSON.parse(req.responseText);
                    console.log(data);
                    window['p'].push(data);
                }
            }

            req.send(null);
            console.log(req);
        }(cont))
        cont+=20;
    }
}

getAllProducts(productArray);

1 个答案:

答案 0 :(得分:0)

好的,我回来了:D好吧...

我们正在使用jQuery在各处提供更清晰的代码,并且为示例提供便利,如果您想避免使用jQuery,则可以通过本机学习

首先,您将要创建20个ID的组,以使其准备好在其上进行迭代。 然后,您将循环每个循环并发送一个ajax,我们将使用jQuery只是因为我们将使代码更整洁并同时处理promise。.

list = [1, 2, 3, 4]
eles = list.pop(2)
# list becomes [3, 4]
# eles = [1, 2]

在这里看一下这个小提琴,它并不能完全起作用,但是您可以将其应用到您的案例中(创建一个函数并将原始产品传递给等等)

Fiddle Demo