2010-05-06 167 views
1

我必須發送一個二維JavaScript數組到PHP頁面。 的確,我正在製作一個表單構建器,用戶可以在其中添加或刪除字段。
這些字段使用JavaScript(jQuery)添加(或刪除)。當用戶完成並點擊「發佈」按鈕時,我必須獲取所有相關字段並將它們發送到PHP頁面,該頁面可以用它構建一個真實的表單。
我找到了一種方法來做到這一點,但我敢肯定它不是很乾淨:JavaScript二維數組到PHP

addedFields = new Array(); 
$("#add-info .field").each(function() { 
    addedFields.push(new Array($(this).find('.name').val(), $(this).find('.type').val(), $(this).find('.size').val())); 
}); 

基本上,「.field」類對象是<tr>和「.name」,「.type」和「.size」對象是輸入。
所以我得到的[name, type, size]一個數組,然後我把它轉換成使用

addedFields = addedFields.join(";"); 

最後,我去PHP形成這樣的字符串;

document.location.href = "create.php?addedfields=" + addedFields; 

關於PHP代碼,創建使用explode()函數PHP數組:

$addedFields = explode(";", $_GET['addedfields']); 

,然後我再次使用它的每個元素的陣列中:

foreach ($addedFields as $field) { 
    $field = explode(",", $field); 
    echo "<li>Field with name : '$field[0]', of '$field[1]' type and with a size of $field[2]</li>"; 
} 

所以它的作品,但它似乎很髒......

回答

0

請嘗試考慮使用JSON在PHP和JavaScript之間交互數據。

JSON內置到Javascript中,並有一個很棒的PHP庫。去看一下。

1

把這些輸入字段放在一個表單元素。使用JSON像

var formData = $('form').serializeArray(); 
formData  = window.JSON.stringifiy(formData); 

$.post('address', {addedfields: formData}, function(){}); 

類似的東西應該在jQuery中做。 在後端將JSON轉換爲對象並循環播放。

+0

'window.JSON'不是跨瀏覽器的。 – Tgr 2010-05-06 13:41:25

+0

真實故事,所以簡單的if(typeof(window.JSON)==='object')應該有所幫助。如果它不可用,請改爲使用JavaScript JSON解決方案。 – jAndy 2010-05-06 14:44:37

1

在PHP中使用自動排列功能:

var data = {}; 
$("#add-info .field").each(function(i) { 
    data['field['+i+'][name]'] = $(this).find('.name').val(); 
    data['field['+i+'][type]'] = $(this).find('.type').val(); 
    data['field['+i+'][size]'] = $(this).find('.size').val()]); 
}); 
$.post("target.php", data); 

然後在服務器端

var_dump($_POST['field']); 
// array(
// 0 => array(
//  'name' => ... 
//  'type' => ... 
//  'size' => ... 
// ), 
// 1 => ... 

編輯:稍微更優雅版的循環:

$("#add-info .field").each(function(i) { 
    for (attr in {name: 1, type: 1, size: 1}) { 
    data['field['+i+']['+attr+']'] = $(this).find('.'+attr).val(); 
    } 
});