我需要通过一个传递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);
答案 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]
在这里看一下这个小提琴,它并不能完全起作用,但是您可以将其应用到您的案例中(创建一个函数并将原始产品传递给等等)