2012-02-17 84 views
0

我已經花了最後幾個小時爭取寫一些JavaScript和jQuery。通過html表格數據循環並提交回服務器

基本上我通過一個表格試圖循環檢查,如果屬性的TD中存在,如果它確實增加了其信息到一個數組中,並張貼到服務器

我的代碼(我相信這可能是更好)

 $("#save-changes").click(function() { 
     var param = []; 
     var table = $("#products-grid > .t-grid-content > table tbody tr").each(function (i) { 
      //find checkboxes using class 
      var td = ($(this).find("td:nth-child(2)").find(".cb")); 
      var attr = $(td).attr('data-item'); 

      if (typeof attr !== 'undefined' && attr !== false) { 
       console.log(td); 
       param.push({ "itemId": attr, "productId": td.val() }); 
      } 
     }); 
     console.log(param); 

     $.ajax({ 
      url: '@Url.Action("ApplyProduct")', 
      data: param, 
      type: 'POST', 
      success: function (e) { 

我現在試圖將數組傳回服務器。我需要做什麼才能將數據作爲服務器可以理解的參數發回服務器?

任何幫助將是偉大的!

回答

0

添加兩個參數

dataType: "json", 
data: JSON.stringify(param) 

您阿賈克斯電話。創建一個包含兩個int屬性int(稱爲itemId和productId)的對象服務器端,然後創建一個JsonResult路由,該路由將您發佈的對象數組(也就是您的應用中的ApplyProduct)。

+0

stringify插件支持IE,這不是跨瀏覽器兼容的。這是一個好方法,但需要IE的插件。 – 2012-02-17 01:41:50

+0

Spalsh-x說取決於瀏覽器,你可能需要一個js庫讓json.stringify工作,你測試函數是否存在以及它是否包含額外的lib。它在更新的IE中原生支持。 – kmcc049 2012-02-17 01:47:11

+0

哦,你可能必須確保這個對象的數組被稱爲參數在路線方法簽名 – kmcc049 2012-02-17 01:54:35

0

您不能將數組發送到服務器,它們必須是字符串。

,你可以一起加入陣列這樣

param.join(";"); 

,將創建一個分隔每個值的字符串;

還需要指定數據選項作爲鍵值JSON

$.ajax({ 
    url: '@Url.Action("ApplyProduct")', 
    data: { 
     param : param 
    }, 
    type: 'POST', 

然後在服務器端,你可以,除非你使用的是分割字符串返回到一個數組

$param = explode(";",$_POST['param']); 
+0

該死的kmcc的答案是更好:) – Aaike 2012-02-17 01:31:21

+0

感謝球員的幫助:) – 2012-02-17 01:45:31