2012-05-07 58 views
0

我正在使用serialize()函數來獲取表單中的所有字段。在極少數情況下,顧客稱他們保存購物車後只留下一件物品。經過調查,事實證明,對於某些用戶,serialize()函數僅提交名爲items[ITEMNUM] = qty的最後一個項目數組。.serialize()在所有瀏覽器中不一致

HTML:

<form id="cartitems" action="self"> 
    <table width="98%" border="0"> 
     <tr> 
      <td style=" font-size:.9em;">title</td> 
      <td width="30"> <input name="items[AH33.3600]" class="qty" value="1" /></td> 
      <td width="30" nowrap="nowrap" style="padding-right:10px; border-bottom:1px solid #CCC;">Total</td> 
     </tr> 
     <tr> 
      <td style=" font-size:.9em;">title</td> 
      <td width="30"> <input name="items[PNP-A00SVR30]" class="qty" value="1" /></td> 
      <td width="30" nowrap="nowrap" style="padding-right:10px; border-bottom:1px solid #CCC;">Total</td> 
     </tr> 
     <tr> 
      <td style=" font-size:.9em;">title</td> 
      <td width="30"> <input name="items[A4882+++++107+5X12]" class="qty" value="1" /></td> 
      <td width="30" nowrap="nowrap" style="padding-right:10px; border-bottom:1px solid #CCC;">Total</td> 
     </tr> 
    </table> 
</form> 

的JavaScript:

var subform = $("#cartitems").serialize(); 
$.ajax({ 
    beforeSend: function() {   
     $('#cartitems').slideUp().queue(function() { 
      $(this).dequeue(); 
      $('#cartitems').html(' Please wait... Cart Loading').show(); 
     }); 
    }, 
    url: "/order/ajax/cart", 
    type: "POST", 
    cache: false, 
    data: subform, 
    dataType: "html", 
    success: function(html){ 
     alert('info saved'); 
    } 
}); 

我跟客戶的最新使用的Firefox 7

有誰看到了問題?

+2

我只看到一個輸入在車中的物品構成,多少應該有? –

+0

對不起,行標籤在foreach()中。數量會有所不同,但有問題的客戶有不止一個。有時候只有一兩件東西會成功,其餘的東西都會掉下來。 – RichardW11

+0

幫助顯示標記是沒有severside代碼。也就是從視圖源/調試器複製標記。 – epascarello

回答

0

我在多個瀏覽器測試,這和它似乎工作正常 - http://jsfiddle.net/z6P4x/

+0

是的,這也是我的想法。但它看起來像一些奇怪的瀏覽器版本,只抓住我陣列中的最後一個輸入。我無法複製,但發生在使用舊瀏覽器的客戶身上。我也想知道是否使用urlencode()來編碼數組中的項目編號。 – RichardW11

+0

我似乎通過在表單底部查找隱藏字段來緩解了這個問題。如果它沒有提交,那麼我給用戶一個錯誤。這似乎解決了95%的用戶投訴。我會將此標記爲您的時間回答。 – RichardW11