【问题标题】:jquery serialize and $.post and receiving incomplete array on serversidejquery 序列化和 $.post 并在服务器端接收不完整的数组
【发布时间】:2013-02-13 11:39:02
【问题描述】:

jquery:

$("#btnSaveForm").click(function(){
...
$.post('../optional/setup/processItemcn.php', $("#FormTemplate").serialize(), function(data) {
     alert(data);
});
...
});

带有表单的php:

<form id="FormTemplate" class="FormTemplate">
  <input type="text" name="kode_item[]" value="1" />
  <input type="text" name="kode_item[]" value="2" />
  <input type="text" name="kode_item[]" value="3" />
  .
  .
  <input type="text" name="kode_item[]" value="197" />
</form>

服务器端的php:

$ID = $_POST["kode_item"];
$count = count($ID);   
echo "$count";

我正在尝试使用 jquery post 和序列化将所有数组数据从表单发送到服务器端。 我有 kode_item = 197 个项目的总项目数组,但是在将其发送到服务器端然后我从服务器端检查并回显它 $count = 167 个项目的结果。这就是为什么我无法更新与 kode_item > 167 相关的数据,因为它不会在服务器端处理。有人有什么想法吗?

【问题讨论】:

  • 请显示print_r($ID)的输出。
  • alert($("#FormTemplate input[type=text]").length);也
  • 里面有空字段(没有值)吗?
  • 代码已通过 200 个条目进行测试,也通过发送空值进行测试,但计数始终正确,您必须在某处拼写错误.. 深入了解
  • @str print_r($ID) 的结果是:Array([0]=>1 [1]=>2 [2]=>3 ... [166]=>167)

标签: php jquery serialization


【解决方案1】:

尝试检查您的 php.ini 中的设置是否正确

; Maximum size of POST data that PHP will accept.
post_max_size = 8M

【讨论】:

  • 检查我的 php.ini post_max_size = 80M 已经更改为 8M 然后重新启动 apache 服务并没有任何变化......并且......还试图更改 max_execution_time = 1000 但仍然没有任何变化.. .
【解决方案2】:

我也遇到过这个问题,但没有找到解决方案,在阅读了 jQuery 文档后我有了一个想法。

您可以使用.serializeArray() 而不是只使用.serialize() 并使用php.ini 文件。这是我在项目中使用的代码。

jQuery('.modal').on('click','.saveFeature',function(){ 

        var form = jQuery('#featureForm').serializeArray();
        jQuery.ajaxSetup({
            data:{
                csrf_name:jQuery('input[name="csrf_name"]').val()
            }
        });
        var url = "<?php echo 'product/features/'.$pid;?>";
        jQuery.post(url,{form}, function(msg){
            alert(msg);
        } );
    });

提交表单后,您将获得以下格式的数据。

Array
(
[0] => Array
    (
        [name] => csrf_name
        [value] => 3802b11296d42e602533bf266bb800bd
    )

[1] => Array
    (
        [name] => title
        [value] => kjhkjh
    )

[2] => Array
    (
        [name] => title_icon
        [value] => fa fa-heart
    )

[3] => Array
    (
        [name] => icon_color
        [value] => #a81616
    )

[4] => Array
    (
        [name] => icon_bg_color
        [value] => #662f2f
    )

[5] => Array
    (
        [name] => description
        [value] => testb
    )

[6] => Array
    (
        [name] => box_bg_color
        [value] => #bd2222
    )

[7] => Array
    (
        [name] => box_bttm_bg
        [value] => #a61e1e
    )

)

在后端处理帖子数据,我正在使用 CodeIgniter 框架。以key=&gt;value 格式组织该帖子数据,以便于存储数据。

$arry = $this->input->post('form');
    $post = [];
    //check if this is not empty and is array
    if(!empty($arry) && is_array($arry)){
        //iterate over post data and organize array in key value format.
        foreach($arry as $ar) 
        {
            $post[$ar['name']] = $ar['value'];
        }
    }

    $data = [
        'pid' => $pid,
        'title' => $post['title'],
        'icon' => $post['title_icon'],
        'icon_color' => $post['icon_color'],
        'icon_bg_color' => $post['icon_bg_color'],
        'description' => $post['description'],
        'box_bg_color' => $post['box_bg_color'],
        'box_bttm_color' => $post['box_bttm_bg'],
    ];

    $this->db->insert(TBL_PRODUCT_FEATURES, $data);

如果我错了,请纠正我;我刚刚分享了解决这个问题的想法。

【讨论】:

    【解决方案3】:

    解决方案来自我的虚拟主机技术人员。

    从表单发送到服务器端的数组数据太长了,那么..suhosin限制将要发送的数组数据。

    这种方式对我有用。将这两行添加到 php.ini:

    suhosin.post.max_vars = 1500
    suhosin.request.max_vars = 1500
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2019-08-21
      • 2015-10-24
      • 2014-08-22
      • 2023-04-01
      • 2014-06-23
      • 2013-05-24
      相关资源
      最近更新 更多