【问题标题】:Does js serialize() work with array field names?js serialize() 是否适用于数组字段名称?
【发布时间】:2016-10-26 23:20:54
【问题描述】:

我有一个如下所示的表单域:

<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/quadrants/thresholds-write 页面转储 $_POST 数组,我会在控制台上看到我的输入值(序列化数据转储),但 post 变量始终显示默认值,在本例中为“0.0000”。

控制台sn-p:

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

转储到 $_POST 的 php 中:

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 功能。

【问题讨论】:

  • 所以当你写“serializeData 函数”时,你的意思是.serialize(),对吧?无论如何,首先要做的是使用浏览器控制台查看secureajax 代码实际上是放入传出的HTTP 请求中。
  • 是的,我们可能需要看看secureajax 中有什么。它可能期望所有输入都具有 type="" 属性。
  • 问题是你在页面加载时设置了formData。您需要将该代码放入在用户提交表单时运行的函数中,以便它获取输入的更新值。

标签: javascript php arrays ajax


【解决方案1】:

我发现了问题。我有多个 div,一次只显示一个,并且数组变量没有考虑多个表单,因此最后一个表单的变量覆盖了它们。即使这是一个笨拙的错误,也将其留在这里,因为其他人可能会这样做。很容易被忽视。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多