我有一个包含关联数组字段的表单:
<label for="my_array[][system]">System</label>
<input id="my_array[][system]" type="text" value="" name="my_array[0][system]">
<label for="my_array[][name]">Name</label>
<input id="my_array[][name]" type="text" value="" name="my_array[0][name]">
我试图让这个表单张贴到PHP使用Ajax。我试过了:
$.ajax({
type: "POST",
dataType: "json",
url: ajaxurl,
data: {
action: "update_postmeta",
post_id: post_id,
nonce: nonce,
my_array: $('input:text[name="my_array*"]')
.each(function() { values[this.name] = $(this).val() })
},
success: function (response) {
alert(response);
},
error: function ( jqXHR, textStatus, errorThrown) {
alert("Error: " + textStatus + ''r'n'r'n' + errorThrown);
}
})
问题在这行代码中:
my_array: $('input:text[name="my_array*"]')
.each(function() { values[this.name] = $(this).val() })
.each()不是一个函数…我不知道如何得到my_array
填充与表单的数据在相同的结构,它将使用一个常规的表单提交(没有Ajax)。
我如何张贴表单的数据时,它是创建一个关联数组?
更改my_array函数()以自动调用该函数并返回一个key: value对象数组:
{
...,
my_array: (function() {
var my_array = [];
$('input:text[name="my_array*"]')
.each(function() {
my_obj = {};
my_obj[this.name] = $(this).val();
my_array.push(my_obj);
});
return my_array;
})()
}
另外,您可能需要使用attributeStartsWith选择器语法:
jQuery( "[attribute^='value']" )
为了完整,这里有一个使用对象而不是数组来直接控制my_array的key: value
对的例子。另外,我正在使用startsWith语法。
{
...,
my_array: (function() {
var my_array = {};
$('input:text[name^="my_array"]')
.each(function() {
// Directly sets the key/value data in the POST.
// You could modify the key names if desired.
my_array[this.name] = $(this).val();
});
return my_array;
})()
}