js serialize()可以处理数组字段名吗?


Does js serialize() work with array field names?

我有一个表单字段,看起来像这样:

<input name="cm[3]" value="0.0000">

我使用serializeData函数将它发送到一个安全的ajax函数:

var formData = $(form).serialize();
console.log(formData);
secureajax.securecall({
    url: '/ajax/quadrants/thresholds-write',
    data: formData,
    success: function(data) {
    ... etc

注意,我正在将数据转储到控制台…

如果我运行这段代码,然后立即在/ajax/象限/阈值-写页面转储$_POST数组,我在控制台上看到我的输入值(序列化的数据转储),但是post变量总是显示默认值,在本例中为"0.0000"。

控制台代码:

quad_token=b765def8e66df0d473148310175e8a6e&systemsId=12&selectedString=1&cm%5B3%5D=9999...

在php中转储$_POST:

Array
(
    [systemsId] => 12
    [selectedString] => 1
    [cm] => Array
        (
            [3] => 0.0000
            [5] => 1.0000
            [7] => 0.0000

CM[3]的默认值是0.0000,但是当我输入诸如9999之类的东西时,我在js中看到,但好像系统正在读取值标记,而不是输入的值。或者,我认为数组形式字段名没有处理但为什么数组的格式没问题,只是值混乱了?

任何想法?

注意:secureajax是一个自定义函数,为ajax调用提供CSRF功能。

我发现了这个问题。我有多个div,一次只显示一个,数组变量没有考虑到多个形式,所以最后一个形式的变量覆盖了它们。把这个留在这里,尽管这是一个愚蠢的错误,因为其他人可能也会这样做。这很容易被忽视。