通过AJAX向PHP发送带有关联数组的表单


Send form with associative array via AJAX to PHP

我有一个包含关联数组字段的表单:

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