如何在通过ajax后访问json_decode()数据

时间:2017-12-20 21:39:49

标签: php jquery ajax

我目前正在编写一个简单的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
    )

    )

但是我如何使用这些数据,例如,如果我想要echo标题名称,以下代码将不起作用

  

echo $ _POST ['title'];

为了使用它,我该怎么办呢?

PS:我已经成功使用序列化(),然后在php中使用parse_str()但是因为我正在学习我只需要回答这个问题,而不是替代它

3 个答案:

答案 0 :(得分:2)

简化整个过程并使用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'];

答案 1 :(得分:1)

鉴于$_POST['form']提供的$("#emp-post-form").serializeArray()的(繁琐)数据结构,您可以将服务器端转换为由原始表单元素名称键入的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

答案 2 :(得分:0)

要获得标题,如果您知道可以执行的密钥

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

如果你不这样做,你可以循环使用它:

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