2010-05-06 164 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(); 
    } 
});