我試圖把它放在通用的術語中,以便更容易理解。請理解這是一個概念,而不是我想要克服的具體例子。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