私はこれを一般的な用語に置き換えて、わかりやすくしました。私が克服しようとしている具体例ではなく、それがコンセプトであることをご理解ください。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);
}
私も進行状況を表示するために、第2のsetTimeout関数をやってきましたが、それは最後の1に直進し、機能のどれもが、このように、実行します。
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);
}
感謝を事前に!
を、しかし、と述べているときは、同期機能として扱うていますサーバーからデータを取得しています。これはあなたが抱えている問題の根源になりそうです。 – nrabinowitz