【问题标题】:How to access json_decode() data after passing through ajax通过ajax后如何访问json_decode()数据
【发布时间】:2017-12-20 21:39:48
【问题描述】:

我目前正在编写一个简单的 ajax 脚本来练习我的 ajax 技能,我正在使用 serializeArray() 方法通过 ajax 提交表单,我能够成功通过它但无法执行任何操作数据。 这是我目前使用的 ajax 脚本

 var submit_post = $("#submit-post");
 $(submit_post).on('click',function (e)
{
    e.preventDefault();
    $.ajax(
    {
        method:'POST',
        data:
        {
            form:JSON.stringify($("#emp-post-form").serializeArray())
        },success:function(data)
        {
            console.log(data);
        },dataType:'text'
    })
})

在后端我以以下方式处理数据

if(isset($_POST['form']))
    {
        $form_data = [];
        $form_data = json_decode(stripslashes($_POST['form']),true);
        var_dump($form_data);
    }

当我 var_dump() 发布数据时,以下是我的数据格式

   Array
   (

    [0] => Array
    (
        [name] => emp-id-list
        [value] => 1248
    )

[1] => Array
    (
        [name] => emp-first-name
        [value] => John
    )

[2] => Array
    (
        [name] => emp-last-name
        [value] => King
    )

[3] => Array
    (
        [name] => title
        [value] => Post title
    )

[4] => Array
    (
        [name] => post-content
        [value] => Some Post
    )

    )

但是如果我想要回显标题名称,我该如何使用这些数据,下面的代码将不起作用

回显 $_POST['title'];

接下来我应该怎么做才能使用它?

PS:我已经成功使用 serialize(),然后在 php 中使用 parse_str(),但据我所知,我只需要回答这个问题,而不是替代它 p>

【问题讨论】:

  • 你需要告诉 PHP 你想要哪个名称/值。所以$form_data[0]['name'] 将是“emp-id-list”,$form_data[3]['value'] 将是“帖子标题”
  • 这就是我不使用 serializeArray() 的原因,在 PHP 端使用它是一个烦人的结构

标签: php jquery ajax


【解决方案1】:

简化整个过程,使用serialize()对整个表单进行编码,就像不使用ajax发送一样

$.ajax({
  url:'...',
  method: 'POST',
  data: $("#emp-post-form").serialize(),
  success: function(data) {
    console.log(data);
  },
  dataType: 'text'
})

然后表单元素中的所有name 将直接在$_POST 中可用

$title=  $_POST['title'];
$emp_fName = $_POST['emp-first-name'];

【讨论】:

    【解决方案2】:

    鉴于$("#emp-post-form").serializeArray() 提供的$_POST['form'] 的(繁琐的)数据结构,您可以在服务器端将其转换为以原始表单元素名称为键的PHP 关联数组:

    $form_data = array();
    
    if(isset($_POST['form'])) 
    {
        $raw_form_data = json_decode(stripslashes($_POST['form']), true);
        foreach($raw_form_data, true) as $item) {
            $form_data[$item['name']] = $item['value'];
        };
    }
    

    您现在有了一个可以按您想要的方式直接寻址的数组:

    echo $form_data['emp-id-list']; // 1248
    echo $form_data['emp-first-name']; // John
    echo $form_data['emp-last-name']; // King
    echo $form_data['title']; // Post title
    echo $form_data['post-content']; // Some Post
    

    【讨论】:

      【解决方案3】:

      要得到标题,如果你知道你可以做的关键

      $title = $form_data[3]['value'];
      

      或者如果你不这样做,你可以循环遍历它:

      foreach($form_data as $input){
          if($input['name'] == 'title'){
              $title = $input['value'];
          }
      }
      

      【讨论】:

      • 您似乎不知道 serializeArray() 的作用。 api.jquery.com/serializeArrayOP如何在ajax请求中使用php?
      • 为什么它不起作用? ajax调用被发送到一个php页面,我添加的代码是在那里使用的,而不是在客户端。
      • 为什么它不是一个很好的解决方案?我没有看到更好的使用 serializeArray()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 2012-10-24
      • 2016-01-04
      相关资源
      最近更新 更多