我试图把它放在通用的术语中,以便更容易理解。请理解这是一个概念,而不是我想要克服的具体例子。JQuery/JavaScript回调,模态对话框
OK,所以我有一些JavaScript,使一个服务器调用来获取一个对象,让我们说一个订单。该订单具有包含订单商品ID数组的属性。那么我想遍历该ID和得到订单项记录,并以一个数组的形式返回他们,就像这样:
function GetOrderItems(orderId){
var orderItemIDs = GetOrderItemIDs(orderId); // array of order item IDs
var orderItems = [];
$.each(orderItemIDs, function(){
var orderItem = GetOrderItem(this); // ignore this function's implementation
orderItems.push(orderItem);
});
return orderItems;
}
的问题是,可能有相当多的订单项目,但我必须让他们从服务器1一次(不要问,这不会改变)。所以,我想让他们知道(使用jQuery UI模式对话框)有多少订单,以便他们知道需要多长时间。所以,我试图注入下面提到的线:
function GetOrderItems(orderId){
var orderItemIDs = GetOrderItemIDs(orderId); // array of order item IDs
var orderItems = [];
$("#modalDiv").dialog({title: orderItemIDs.length + " order items to get."});
$.each(orderItemIDs, function(){
var orderItem = GetOrderItem(this); // ignore this function's implementation
orderItems.push(orderItem);
});
return orderItems;
}
问题是,对话框显示,但只有当一切都完成。我从前面的问题中学习到,你可以使用setTimeout来获取模态,但是如何返回我正在构建的数组?
function GetOrderItems(orderId){
var orderItemIDs = GetOrderItemIDs(orderId); // array of order item IDs
var orderItems = [];
$("#modalDiv").dialog({title: orderItemIDs.length + " order items to get."});
setTimeout(function(){
$.each(orderItemIDs, function(){
var orderItem = GetOrderItem(this); //ignore this function's implementation
orderItems.push(orderItem);
});
return orderItems;
},0);
}
我也做了第二setTimeout函数出现进展,但它直接到最后一个,没有的功能的运行,像这样:
function GetOrderItems(orderId){
var orderItemIDs = GetOrderItemIDs(orderId); // array of order item IDs
var orderItems = [];
$("#modalDiv").dialog({title: orderItemIDs.length + " order items to get."});
setTimeout(function(){
$.each(orderItemIDs, function(){
setTimeout(function(){
var orderItem = GetOrderItem(this); //ignore this function's implementation
orderItems.push(orderItem);
},500);
});
return orderItems;
},0);
}
提前感谢!
你告诉我们忽视GetOrderItemIDs'和'GetOrderItem'的'执行,但你把它们当作同步功能,同时指出,你从服务器获取数据。这似乎可能是你遇到的问题的根源。 – nrabinowitz