通过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;
    })()
}