2016-08-25 8 views
0

私はこのJavaScript関数を持っています。JavaScriptのAjaxコールとコールバック

function create_categories(callback) { 
    cart_cats = []; 
    E.Cart.calculateTotal(function(order) { 
    cart_total = order.total; 
    cart_items = order.cart.items; 
    // loop through the items to get their categories. 
    for(var i=0; i<cart_items.length; i++) { 
     get_product_category(cart_items[i].product.id); 
    } 
    }); 

    setTimeout(callback, 3000); 
} 

get_product_category機能はcart_itemのカテゴリを取得するには、AJAX呼び出しを行い、その後、グローバルに宣言されcart_cats配列、にそれをプッシュして、私は私のcallback

でそれを使用する必要がありますここでには多くの項目が含まれている可能性があるため、create_categories関数を実行してから実行する最大時間を決めることができないため、setTimeoutは使用しません。

forループが実行を終了するときにコールバックを呼び出す必要があります。

答えて

0
function create_categories(callback) { 
    cart_cats = []; 
    E.Cart.calculateTotal(function(order) { 
    cart_total = order.total; 
    cart_items = order.cart.items; 
    completed = 0; 
    for(var i=0; i<cart_items.length; i++) { 
     get_product_category(cart_items[i].product.id); 
     completed++; 
    } 
    if(completed == cart_items.length){ 
     callback; 
    } 
    }); 
} 
+0

'callback;は' callback(); 'にする必要があります。 –

+0

OK ..それは動作します!..しかし、あなたはそれを理解するのを助けることができます。私の理解は、 'get_product_category'がajax呼び出しを行っているため、コントロールは先に進んで(forループから)、if文を実行します。そうじゃない?それはいつ前に進んでいくのですか? –

+0

@ムバシャール:これがうまくいけば、それを受け入れることを検討しますか?ここでは必須ではありませんが、回答者と今後の読者にとって役に立ちます。 – halfer

関連する問題