【问题标题】:How to get the POST values from serializeArray in PHP?如何从 PHP 中的 serializeArray 获取 POST 值?
【发布时间】:2011-01-15 07:22:53
【问题描述】:

我正在尝试这种我见过serializeArray() 的新方法。

//with ajax
var data = $("#form :input").serializeArray();
post_var = {'action': 'process', 'data': data };
$.ajax({.....etc

所以我得到了这些键值对,但是如何用 PHP 访问它们呢?

我认为我需要这样做,但它不起作用:

// in PHP script
$data = json_decode($_POST['data'], true);

var_dump($data);// will return NULL?

谢谢,理查德

【问题讨论】:

  • 你对json_decode的返回值有什么处理吗?
  • 谢谢,之后我尝试像关联数组一样使用它。我现在将 post 数组存储在会话变量中,以便可以在其他地方执行 print_r 或 var_dump。现在我什么都看不见了。

标签: php jquery json parsing serializearray


【解决方案1】:

你可以在php中使用这个函数来反转serializeArray()。

<?php
function serializeToArray($data){
        foreach ($data as $d) {
            if( substr($d["name"], -1) == "]" ){
                $d["name"] = explode("[", str_replace("]", "", $d["name"]));
                switch (sizeof($d["name"])) {
                    case 2:
                        $a[$d["name"][0]][$d["name"][1]] = $d["value"];
                    break;

                    case 3:
                        $a[$d["name"][0]][$d["name"][1]][$d["name"][2]] = $d["value"];
                    break;

                    case 4:
                        $a[$d["name"][0]][$d["name"][1]][$d["name"][2]][$d["name"][3]] = $d["value"];
                    break;
                }
            }else{
                $a[$d["name"]] = $d["value"];
            } // if
        } // foreach

        return $a;
    }
?>

【讨论】:

    【解决方案2】:

    可以使用序列化数组和 json_decode()

    // js
    var dats = JSON.stringify($(this).serializeArray());
    data: { values : dats } // ajax call
    
    //PHP
     $value =  (json_decode(stripslashes($_REQUEST['values']), true));
    

    值作为数组接收

    每个值都可以使用 $value[0]['value'] 检索每个 html 组件名称以 $value[0]['name']

    print_r($value) //gives the following result
    Array ( [0] => Array ( [name] => name [value] => Test ) [1] => Array ( [name] => exhibitor_id [value] => 36 ) [2] => Array ( [name] => email [value] => test@gmail.com ) [3] => Array ( [name] => phone [value] => 048028 ) [4] => Array ( [name] => titles [value] => Enquiry ) [5] => Array ( [name] => text [value] => test ) ) 
    

    【讨论】:

      【解决方案3】:

      我的情况与此非常相似,我相信 Ty W 有正确的答案。我将包含我的代码示例,以防万一有足够的差异来更改结果,但似乎您可以像通常在 php 中一样使用发布的值。

      // Javascript
      $('#form-name').submit(function(evt){
      var data = $(this).serializeArray();
      $.ajax({ ...etc...
      
      // PHP
      echo $_POST['fieldName'];
      

      这是一个非常简化的示例,但我认为关键是您不想使用 json_decode() 方法,因为它可能会产生不需要的输出。

      【讨论】:

        【解决方案4】:

        通过进行以下更改,OP 实际上仍然可以使用 serializeArray() 而不仅仅是 serialize():

        //JS 
        var data = $("#form :input").serializeArray();
        data = JSON.stringify(data);
        post_var = {'action': 'process', 'data': data };
        $.ajax({.....etc
        
        // PHP
        $data = json_decode(stripslashes($_POST['data']),true);
        print_r($data); // this will print out the post data as an associative array
        

        【讨论】:

          【解决方案5】:

          就像 Gumbo 建议的那样,您可能没有处理 json_decode 的返回值。
          试试

          $data = json_decode($_POST['data'], true);
          var_dump($data);
          

          如果$data 不包含预期的数据,那么var_dump($_POST); 可以查看Ajax 调用向您的脚本发布的内容。可能是您尝试从错误的密钥访问 JSON。

          编辑
          实际上,您首先应该确保您真正发送的是 JSON :)
          用于序列化状态的 jQuery 文档 .serializeArray() 方法创建了一个 JavaScript array 对象,准备好编码为 JSON 字符串。 准备就绪要编码的不是 JSON。显然,jQuery 中没有 Object2JSON 函数,所以要么使用https://github.com/douglascrockford/JSON-js/blob/master/json2.js 作为第三方库,要么使用http://api.jquery.com/serialize/

          【讨论】:

          • 首先我做了 print_r($_POST) 并且我看到了 [object object] 并且在 json_decode 保存 json 数据的 postvar 之后我什么也没得到。我现在正在做 var_dump。
          • 看来你是对的,Saffraz。然后我会研究序列化。
          【解决方案6】:

          返回的 JSON 结构不是字符串。您必须使用插件或第三方库来“字符串化”它。有关详细信息,请参阅此内容:

          http://www.tutorialspoint.com/jquery/ajax-serializearray.htm

          【讨论】:

          • 真的,php没有办法处理吗??
          • @Richard:这是可能的,但你会找到解决办法的。
          【解决方案7】:

          javascript 不会改变发布值的方式吗?你不应该像往常一样通过$_POST['name_of_input_goes_here']访问PHP的值吗?

          编辑:您可以随时转储 $_POST 的内容,以查看您从使用 print_r($_POST) 的 javascript 表单提交中收到的内容。这将使您了解在 PHP 中需要做什么才能访问所需的数据。

          【讨论】:

          • 贴出来的字符串是json格式的,带这样的括号{},我想这里一定涉及到一些解析。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-02-27
          • 1970-01-01
          • 2011-11-22
          • 1970-01-01
          • 2016-04-14
          • 2021-08-31
          • 1970-01-01
          相关资源
          最近更新 更多