通过AJAX将带有关联数组的表单发送到PHP
我有一个包含关联数组字段的表单:通过AJAX将带有关联数组的表单发送到PHP,php,jquery,ajax,Php,Jquery,Ajax,我有一个包含关联数组字段的表单: <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]"
<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]">
问题出在这一行代码上:
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;
})()
}
此外,您可能需要使用选择器语法:
jQuery(“[attribute^='value']”)
为了完整起见,下面是一个使用对象而不是数组直接控制my_数组的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;
})()
}
将其作为JavaScript对象发布您的问题并不完全清楚
$.fn.each()
是一个函数,应该可以用来填充数组。您是说.each()
不起作用,还是说您不能通过$.ajax()
将数组作为数据发布?@Nostalg.io我想问题出在我的选择器中-是否正确使用星号来选择关联数组表单字段?由于选择器失败。each()无效,我认为?:西娅,你说得对。我一直在一个空的JavaScript控制台上用一个已知的好ajaxurl测试它。这一行确实破坏了功能。奇怪的是,“断裂”部分本身运行良好…好的。我认为这也有一个错误,但首先我想让你试试这个。使用新的jQuery.ajax()
API。函数签名将url作为第一个参数:jQuery.ajax(url[,settings])
Ok,这对我来说很有用。我在这个页面上发布的数据和一些测试变量显示为:action:update\u postmeta POST\u id:7 nonce:asdfsdf My\u array[0][]:My\u array[1][q]:My\u array[2][author]:
当然。。。输入字段中没有数据,因此为空。@Nostaig.io Ajax帖子成功。我的所有其他表单变量都在$\u POST中,但没有一个my\u数组为null。没有错误。我要在这里做些追踪,不。选择器没有返回任何结果。我知道这是对的,但肯定还有别的事情发生。仍在检查。您的编辑解决了问题!非常感谢。我看到表单变量现在正在进入服务器。如果表单像往常一样在没有Ajax的情况下提交,它们的结构就不一样了,但我至少现在可以获取数据了!谢谢。您还可以将my_array
设置为对象而不是数组,然后手动设置key:value对发送。
{
...,
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;
})()
}