我的Ajax发布了使用关联数组创建的表单字段,一切正常,但返回数据的结构不正确。
表单字段:
<input id="my_array[][system]" type="text" value="" name="my_array[0][system]">
<textarea id="my_array[][note]" type="text" value="" name="my_array[0][note]"></textarea>
<input id="my_array[][system]" type="text" value="" name="my_array[1][system]">
<textarea id="my_array[][note]" type="text" value="" name="my_array[1][note]"></textarea>
<input id="my_array[][system]" type="text" value="" name="my_array[2][system]">
<textarea id="my_array[][note]" type="text" value="" name="my_array[2][note]"></textarea>
Ajax电话:
$.ajax(ajaxurl, {
type: "POST",
dataType: "json",
data: {
action: "update_postmeta",
post_id: post_id,
nonce: nonce,
my_array: (function () {
var my_array = {};
$('input:text[name^="my_array"], textarea[name^="my_array"]')
.each(function () {
my_array[this.name] = $(this).val();
});
return my_array;
})()
},
success: function (response) {
alert(response);
},
error: function (jqXHR, textStatus, errorThrown) {
alert("Error: " + textStatus + '\r\n\r\n' + errorThrown);
}
})
结果:
array(3) (
[my_array[0] => array(2) (
[system] => (string) Some system 1
[note] => (string) Note 1
)
[my_array[1] => array(2) (
[system] => (string) Some system 2
[note] => (string) Note 2
)
[my_array[2] => array(2) (
[system] => (string) Some system 3
[note] => (string) Note 3
)
)
我需要它:
array(3) (
[0] => array(2) (
[system] => (string) Some system 1
[note] => (string) Note 1
)
[1] => array(2) (
[system] => (string) Some system 2
[note] => (string) Note 2
)
[2] => array(2) (
[system] => (string) Some system 3
[note] => (string) Note 3
)
)
解决方案在以下代码中:
my_array: (function () {
var my_array = {};
$('input:text[name^="my_array"], textarea[name^="my_array"]')
.each(function () {
my_array[this.name] = $(this).val();
});
return my_array;
})()
但是我的尝试只会让事情变得更糟。如何获得所需的结构?基本上,我需要第二个维度是索引键而不是'my_array [1'等。
答案 0 :(得分:1)
为确保您在php端获得正确值的正确数字键,我认为您将不得不通过正则表达式提取输入的名称并手动分配。
例如,在每个循环内部:
var parsedName = this.name.match(/^my_array\[(\d+)\]\[(.*)\]$/);
my_array[parsedName[1]] = my_array[parsedName[1]] || {};
my_array[parsedName[1]][parsedName[2]] = $(this).val();
答案 1 :(得分:0)
是的...试试这个
my_array: (function () {
var my_array = [];
$('input:text[name^="my_array"],textarea[name^="my_array"]')
.each(function () {
my_array.push([this.name] = $(this).val());
});
return my_array;
})()