【问题标题】:data from js serialized what format in php来自js的数据序列化php中的什么格式
【发布时间】:2017-11-30 12:25:09
【问题描述】:
var data = $('#demoform').serialize();
var action = $('#demoform').attr('data-action');
console.log(data)
$.ajax({
  type: 'POST',
  url: '../include/demo.php',
  dataType: "json",
  data: {
    data: data,
    action: action
  },
  success: function(data) {

  }
}).done(function(data) {

});

在我的 php 中,我得到了数据,如果数据是数组,我会检查它

$data =  $_POST['data'];
if (is_array($data)) {

}else{

}

我不能发送它,当我使用print_r();时我可以得到

task_date=11%2F30%2F2017+8%3A14+PM&task=qwe&task_person=qwe&task_status=0

但我总是在 else 部分结束,这意味着数据不是数组。

如果不是数组,数据的格式是什么?

【问题讨论】:

  • 什么是$data??
  • 我得到数据 - 你是怎么得到的?
  • @Akintunde 这就是我想知道的。 js使用.serialize();发送的数据是什么格式,如果不是数组是什么?
  • @splash58 我正在使用 ajax 将其发送到 php,如 sn-p 中所示
  • var_dump($_POST);

标签: javascript php arrays ajax


【解决方案1】:

在您的情况下,$_POST["data"] 是一个 url 编码的查询字符串,请参阅jQuery manual

说明:将一组表单元素编码为字符串以供提交。

您需要parse_str() 来解析查询字符串,然后您可以对各个值使用urldecode() 来取回原始值

编辑: 正如@splash58 所指出的,这些值已经被解码,请参阅parse_str() 上的手册:

注意:

所有创建的变量(或者如果设置了第二个参数,则返回到数组中的值)已经是 urldecode()d。

所以:

// Get the array
parse_str($_POST["data"], $data); 

【讨论】:

  • 让我在 ajax 中明确说明我需要使用 parse_str(data) 然后在 php 中我需要使用 urldecode($data) 吗?那么我现在在他们身上使用 foreach 吗?我可以检查数组吗?
  • @Lloyd 不,您只需要在 php 中使用 parse_str()。请注意,结果是在第二个参数中设置的。
  • @jeroen 问题出在 js 方面与制作数据
  • @splash58 如果您不需要添加额外的字段,这将是不必要的复杂,但我没有看到问题,您可以发送任何字符串作为值。
  • @jeroen 当然,您的解决方案可以解决问题。但是 OP 在使用此代码时不会得到错误源。从这个角度来说,最好改js,用PHP内部的方法来创建正确的$_POST
【解决方案2】:

您提供的数据不是数组。它是一个键值对,可以像 $data['task']='qwe'

一样访问

【讨论】:

  • 它不是键值对,因为 print_r 返回一个大字符串而不是数组
【解决方案3】:

我看到你有一些 ajax 请求的问题变量。请更新您的代码如下。

var data = $('#demoform').serialize();
var action = $('#demoform').attr('data-action');
console.log(data)
$.ajax({
  type: 'POST',
  url: action,
  data: data,
  success: function(data) {

  }
}).done(function(data) {

});

我希望这会有所帮助。

【讨论】:

    【解决方案4】:

    您需要在收到的数据上使用urldecode()

    这可能是你感兴趣的 -

    <?php
        $data = "task_date=11%2F30%2F2017+8%3A14+PM&task=qwe&task_person=qwe&task_status=0";
        parse_str($data, $output);
        print_r($output);
    ?>
    

    导致 - Array ( [task_date] =&gt; 11/30/2017 8:14 PM [task] =&gt; qwe [task_person] =&gt; qwe [task_status] =&gt; 0 )

    【讨论】:

    • 如果任何值包含编码的&amp;,这将不起作用。
    猜你喜欢
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2017-07-03
    相关资源
    最近更新 更多