换句话说,就是通过AJAX得到一个数组,然后递归遍历数组,取出数组中的每个元素然后分别AJAX。
参考了http://stackoverflow.com/a/14119926/2177408
具体的问题是:我的app向另一个网站的搜索页面发送一个CORS请求,搜索某个客户email所对应的所有订单,然后获得这个搜索结果页面的html。parse这个html,得到所有订单的ID,然后在此发送CORS请求,获取每个订单的具体数据。
具体代码如下:
this.ajax('getAllOrders', email)
.done(function(data){
var orderids = that.parseOrders(data),
count = 0,
morethan20 = false,
length = orderids.length,
s = length > 1 ? true : false;
if(orderids.length > 20){
orderids = orderids.slice(0, 20);
morethan20 = true;
}
var fillAllOrders = function(){
if(!orderids[count]){
that.switchTo('main', {
customer: customer,
orders: customer.orders,
length: length,
s: s,
morethan20: morethan20
});
return false;
}
that.ajax('getOrder', orderids[count]).done(function(data){
if(!!data){
var order = this.fillOrder(data, orderids[count]);
if(!customer.lastname) customer.lastname = order.custlastname;
if(!customer.firstname) customer.firstname = order.custfirstname;
if(!customer.custid) customer.custid = order.custid;
customer.orders.push(order);
}
count++;
fillAllOrders();
});
};
fillAllOrders();
})
.fail(function(xhr, textStatus, errorThrown){
alert('Failed to get customer information.\nPlease check if you have logged in the admin system.');
});
一些解释:
第一个ajax返回后,parse返回的html,结果存入orderids。然后定义一个fillAllOrders的方法。这个方法首先检查orderids是否已经遍历完。如果完成的话,返回false,结束递归;否则取出orderids里面的下一个orderid,将之通过另一个ajax发送出去,获得其具体的信息,然后在其回调函数中递增计数器,并再次递归调用fillAllOrders()。
这些js代码可能看着有些别扭,这是因为这是一个zendesk app,ajax和页面切换有特定的写法。