2011-03-13 87 views
0

我有jQuery生成一個列表項與幾個輸入字段時有人點擊一個特定的鏈接。鏈接如下:通過jQuery的傳遞數組ajax

<a href="#" id="add_sublink" data-sublink_count = "0">Click Here to add more sub links</a> 

jQuery的看起來像這樣

$('#add_sublink').live("click", function(){ 

    var count = $(this).attr('data-sublink_count'); 
    var form = "<li>Link Name:<br />" + 
      "<input type='text' size = '40' id='sublinkname' name='sub_link_name_" + count + "' value=''/><br />" + 
      "Link URL:<br />" + 
      "<input type='text' size = '40' id='sublinkurl' name='sub_link_url_" + count + "' value=''/>" +    
      "</li>"; 


     $('#sublink_list').append(form); 
     var newcount = (Number(count) + Number(1)); 
     $(this).attr('data-sublink_count', newcount) 

    return false;      

}); 

這是它產生

<li>Link Name:<br> 
<input type="text" value="" name="sub_link_name_0" id="sublinkname" size="40"><br> 
Link URL:<br> 
<input type="text" value="" name="sub_link_url_0" id="sublinkurl" size="40"><br> 
</li> 

每次他們該鏈接一個新的列表項上單擊HTML被添加。我也在計數它們,並將計數放在名稱上,以便每個輸入項都是唯一的。

我可能有一個或多個列表項,其中包含輸入值。當點擊提交按鈕時,我正在用jquery收集信息並嘗試通過ajax發送信息。

$('.save_link').live('click', function() { 
    var linkID = $(this).attr('data-link_id'); 

     $('#sublink_list').children().each(function(index) { 
      var this_sublink_name = $(this).find('#sublinkname').val(); 
      var this_sublinkurl = $(this).find('#sublinkurl').val();   

      sub_array[index]['name'] = this_sublink_name; 
      sub_array[index]['url'] = this_sublinkurl;       

      var index = (Number(index) + Number(1)); 

     }); 

     //send the info 
     $.ajax({ 
      url: 'update_link.php', 

      data: jQuery.extend(
       {linkID: linkID},           
       {sub_array: sub_array}),   
      type: 'POST',  
      success: function(results) {   
       if (results == "error"){ 
        //then display an error              
       }else{       
        //display success              
       }           
      } 
     }); 


return false; 
}); 

一切工作正常,但ajax沒有正確發送陣列sub_array

我已閱讀,建議發送陣列這樣

{'sub_array[index][name]': 'value'} //value would be replaced with the actual value 

其他地方但由於列表項是動態的,我不知道有多少會出現,也不知道該值。

我也曾嘗試發送的數據是這樣的:

data: 'linkID=' + linkID +           
     '&sub_array=' + sub_array, 

但它也沒有工作。

在這種情況下,發送具有未知數量的數組項和未知值的多維數組的最佳方式是什麼?

回答

0

發送子數組作爲JSON字符串到後端,並作爲一個數組它有解碼, 老命JSON JavaScript庫, http://www.json.org/

另一個相關的問題:

Why doesn't jquery turn my array into a json string before sending to asp.net web method?

+0

我如何將它轉換爲JSON? – Jason 2011-03-13 19:57:50

+0

你可以在這裏使用JSON庫:http://www.json.org/js.html – DhruvPathak 2011-03-13 20:00:46

+0

這裏是一個PHP的例子,將其轉換回數組/對象http://php.net/manual/en/function。 json-decode.php,你可以在watever後端的類似行上解碼它 – DhruvPathak 2011-03-13 20:01:48

0

我通常使用jQuery plugin AjaxForm自動發送表單中的所有數據到ajax「端點」。爲此,您只需要執行如下操作:

$('#yourForm').ajaxForm(); 

當然,您可以根據自己的需求定製哪些功能。