【问题标题】:Standard form posting with jQuery to php does not get all index values?使用 jQuery 发布到 php 的标准表单无法获取所有索引值?
【发布时间】:2016-11-17 15:57:18
【问题描述】:

我正在尝试将表单提交给 php,但不知何故我没有将所有数据都传递给 php?

初始化帖子的jQuery是这样的:

var fieldsdata = $('form').serialize()
$.post( "index.php",  fieldsdata, function(data){
    console.log( data );
});

.. 我尝试发送到服务器的 fieldsdata 变量是这个(我在控制台中测试这个)

[
  {
    "name": "form_key",
    "value": "FEYzybQEfJjTkzAI"
  },
  {
    "name": "shipment_item_3",
    "value": ""
  },
  {
    "name": "shipment[items][3]_1",
    "value": "21"
  },
  {
    "name": "shipment[items][3]_2",
    "value": "22"
  },
  {
    "name": "shipment[items][3]_3",
    "value": "31"
  },
  {
    "name": "shipment[items][3]_4",
    "value": "42"
  },
  {
    "name": "warehouse-shipment[items][3]_1",
    "value": "1"
  },
  {
    "name": "warehouse-shipment[items][3]_2",
    "value": "1"
  },
  {
    "name": "warehouse-shipment[items][3]_3",
    "value": "1"
  },
  {
    "name": "warehouse-shipment[items][3]_4",
    "value": "1"
  },
  {
    "name": "lotnumber-shipment[items][3][1]_1",
    "value": "4"
  },
  {
    "name": "lotnumber-shipment[items][3][1]_2",
    "value": "5"
  },
  {
    "name": "lotnumber-shipment[items][3][1]_3",
    "value": "5"
  },
  {
    "name": "lotnumber-shipment[items][3][1]_4",
    "value": "6"
  },
  {
    "name": "shipment_item_4",
    "value": ""
  },
  {
    "name": "shipment[items][4]_1",
    "value": "7"
  },
  {
    "name": "warehouse-shipment[items][4]_1",
    "value": "1"
  },
  {
    "name": "lotnumber-shipment[items][4][1]_1",
    "value": "7"
  },
  {
    "name": "shipment[comment_text]",
    "value": ""
  }
]

当我执行这个调用时,我正在检查器中监视网络选项卡,我可以确认我发送到服务器的表单数据是正确的:

而且我在 index.php 文件中只有一行代码,只是为了调试这个信息:

var_dump($_POST);die('e');

这就是我得到的:

/var/www/html/inventory174/index.php:27:
array (size=6)
  'form_key' => string 'FEYzybQEfJjTkzAI' (length=16)
  'shipment_item_3' => string '' (length=0)
  'shipment' => 
    array (size=2)
      'items' => 
        array (size=2)
          3 => string '42' (length=2)
          4 => string '7' (length=1)
      'comment_text' => string '' (length=0)
  'warehouse-shipment' => 
    array (size=1)
      'items' => 
        array (size=2)
          3 => string '1' (length=1)
          4 => string '1' (length=1)
  'lotnumber-shipment' => 
    array (size=1)
      'items' => 
        array (size=2)
          3 => 
            array (size=1)
              ...
          4 => 
            array (size=1)
              ...
  'shipment_item_4' => string '' (length=0)
e

我看到例如这个变量shipment[items][3]_x 没有传递所有键,但只有两个.. 我想我正面临某种变量名称约定限制,但不知道是什么,如果有人可以重新审视这个很有帮助的数据!

我还测试了我的表单是否有效,如下所示:$('edit_form').checkValidity() 我得到了true 回来.. 所以我想没关系

UPDATE1:添加表单标记 -> https://jsfiddle.net/zfn98tha/1/ UPDATE2:$_REQUEST 的输出 -> https://jsfiddle.net/zfn98tha/2/

【问题讨论】:

  • 向我们展示表单的标记。
  • 你能检查一下你的php文件中的print_r($_REQUEST)吗
  • 我添加了有问题的表单和 print_r 输出 .. thx
  • 可以控制表单中的输入名称吗?我会将它们命名为不同的名称:shipment[items][3][x] 而不是 shipment[items][3]_x。这样,字段名称将被格式化为数组,并且您将获得所有索引。
  • 请按照@JayBlanchard 的说明添加标记

标签: php jquery ajax forms http-post


【解决方案1】:

因为您将数据发布到 php,您需要将表单字段名称格式化为有效的数组结构。将shipment[items][3]_x 重命名为shipment[items][3][x],您应该会得到所有索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多