【问题标题】:Ajax Calls and Callbacks in JavaScriptJavaScript 中的 Ajax 调用和回调
【发布时间】:2016-08-25 17:40:44
【问题描述】:

我有这个 JavaScript 函数。

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 函数进行 ajax 调用,以获取 cart_item 的类别,然后将其推送到全局声明的 cart_cats 数组中,我需要在我的 callback 中使用它

现在我不想在这里使用setTimeout,因为我永远无法确定create_categories 函数可以执行的最长时间,之后我调用callback,因为cart_items 可以包含很多项目。

我想在 for 循环执行完毕时调用回调。

【问题讨论】:

    标签: jquery ajax callback settimeout


    【解决方案1】:
    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;
         }
       });
    }
    

    【讨论】:

    • callback; 应该是 callback();
    • 好的.. 它有效!.. 但你能帮我理解它吗.. 我的理解是,由于get_product_category 正在进行 ajax 调用,因此控件将继续前进(退出 for 循环)并执行 if 语句。不是这样吗?它什么时候向前移动,什么时候等待语句完成?
    • @Mubashar:如果可行,您会考虑接受吗?这里不是强制性的,但对回答者和未来的读者都有用。
    猜你喜欢
    • 2012-09-12
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多