2017-05-06 9 views
0

を、私は今のところ機能は、どのように、一度ではなく複数回のメッセージを警告する - JavaScriptの

 function postItems(){ 
      var url = baseURL + "order_items/" 
      var oucu = $("#salesPerson").val() 
      for (var i = 0; i < currentItems.length; ++i) { 
       $.post(url, { 
        OUCU: oucu, 
        password: password, 
        order_id: currentOrderId, 
        widget_id: currentItems[i][0], 
        number: currentItems[i][1], 
        pence_price: currentItems[i][2] 

       }, function(data) { 
        var obj = $.parseJSON(data); 
        if (obj.status == "success") { 
         alert("Order has been placed"); 
        } else { 
         alert(obj.message); 
        } 
       }) 

      } 
     } 

を持って、それは私にすべてのアイテムが掲載された後に配置された順に警告します。すべてのアイテムがAPIに投稿された後、これを一度だけ教えてもらえる方法はありますか?コールバック機能の外にアラートを移動すると、obj.statusにアクセスできません。処理された注文や火災警報()の

+0

メッセージをループ外のリストまたはアレイに保存し、必要なメッセージを生成するために処理したことがありますか? – STLDeveloper

+0

同期ループを使用して非同期操作を処理する場合、いくつかの調整問題が発生します。非同期ループを実装し、ポスト操作全体が完了したときに起動されるコールバックを提供することを検討してください。 – shanks

+0

forループの中で$。post要求をしたくないです。ただしないでください。あなたが望むのは、 'currentItems'の配列全体を渡すというリクエストを1回行うことです(配列であると信じています)。その後、サーバー側で行う必要があることを行います。そして、1つのリクエストに対して1つのアラートメッセージが表示されます。 – caramba

答えて

0

キープトラックは、一度、すべての注文が処理されます:私はたくさんのクリーナー、このような何かをするだろう

var ordersProcessed = []; 
    function postItems(){ 
     var url = baseURL + "order_items/" 
     var oucu = $("#salesPerson").val() 
     for (var i = 0; i < currentItems.length; ++i) { 
      $.post(url, { 
       OUCU: oucu, 
       password: password, 
       order_id: currentOrderId, 
       widget_id: currentItems[i][0], 
       number: currentItems[i][1], 
       pence_price: currentItems[i][2] 

      }, function(data) { 
       var obj = $.parseJSON(data); 
       ordersProcessed.push(obj); 
       if(ordersProcessed.length == currentItems.length) { 
        var message = ""; 
        for(var x = 0; x < ordersProcessed.length; x++) { 
         if(ordersProcessed[x].status == "success") 
          message += "Order has been placed"; 
         else 
          message += ordersProcessed[x].message; 
         message += "\n"; 
        } 
        alert(message);     
       } 
      }) 

     } 
    } 
+0

ありがとう、非常に参考になりました! – BIGJOHN

0

// function to post items to the server 
function postItems (options, items, done) { 
    items.forEach(function (item, index, items) { 
     var lastItemIndex = items.length - 1 
     $.post(options.url, { 
      ouch: option.ouch, 
      password: option.password, 
      order_id: option.currentOrderId, 
      widget_id: item[0], 
      number: item[1], 
      pence_price: item[2] 
     }, function (data) { 
      if (index < lastItemIndex) return; 
      return done($.parseJSON(data)); 
     }); 
    }) 
} 

// usage 
postItems({url: "/serverUrl", ouch:'someString', password: 'itsASecret'}, ["item", "collection", "goes", "here"], function(data){ 
    alert(data.message); 
}); 
関連する問題