2017-05-06 82 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'數組(我相信它是一個數組),然後做你需要在服務器端做的事情。然後你會得到一個警告消息的一個請求。 – 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); 
});