我正在尝试格式化数据以通过ajax将其发送到服务器但是我无法完全序列化输入以在最后获得正确的数组,我无法理解我做错了什么。
<input name="option[16]" value="Value1">
<input name="option[17]" value="Value2">
<input name="option[18]" value="Value3">
var final_options = new Array();
$('input[name="option[]"]').each(function() {
final_options[$(this).attr('name')] = $(this).attr('value');
});
$.ajax({
type: "POST",
url:"./urlPost",
data: {final_options: final_options},
dataType: 'json',
success: function(data){
console.log('Ok');
}
});
在服务器端,我需要将其翻译为;
array(
array(
'16' => 'Value1'
),
array(
'17' => 'Value2'
),
array(
'18' => 'Value3'
),
)
答案 0 :(得分:1)
使用.serialize
。您不需要表单,您可以自己选择元素。
var final_options = $("input[name^=option]").serialize();
请注意,我使用了Attribute Starts With Selector来匹配所有option[#]
输入。您的选择器只会匹配name=option[]
,而不会匹配name=option[16]
。
在服务器上,这将变为:
$_POST['final_options'] = array(
'options' => array(
16 => 'Value1',
17 => 'Value2',
18 => 'Value3'
)
)
在您的代码中,$(this).attr('name')
将类似于option[16]
。所以当你这样做时
final_options[$(this).attr('name')] = $(this).attr('value');
您要分配给final_options['option[16]']
,而不是final_options[16]
。
最后,要获取输入的当前值,请使用.val()
,而不是.attr('value')
。后者从DOM获取value属性,这只是初始默认值。