将JavaScript对象传递给PHP无法正常工作

时间:2016-01-13 20:38:04

标签: javascript php json ajax object

我试图通过JSON.stringify()

将我的javascript对象发送到PHP

使用Javascript:

$('#save').on('click touch', function(){
    obj = {
        "1" : {
            "1" : "hey",
            "2" : "hay"
            },              
        "2" : {
            "1" : "hey",
            "2" : "hay"
            }
    }

    var json = JSON.stringify( obj );
    console.log(json)
    $.ajax({
        type: 'POST',
        url: 'ajax.php',
        success: function(data) {
            alert(data);
            $("p").text(data);
        }
    });
});

ajax.php:

<?php 
    $obj = json_decode($json);
    echo $obj;
?> 

但是此代码返回错误,指出未定义$json。 我不知道为什么这不起作用。

5 个答案:

答案 0 :(得分:5)

有两个问题。

  1. 您没有发送任何带有请求的数据
  2. 这不是您从PHP中获取请求值的方式
  3. 首先,添加*:

    $.ajax({
        type: 'POST',
        url: 'ajax.php',
        data : { json: json }, // <---------------------
        ...
    

    *这只是因为jQuery实现会自动将任何非字符串数据参数转换为form-urlencoded查询字符串。请参阅docs

    然后,在你的PHP中,你应该这样做:

    $jsonStr = $_POST['json'];
    $json = json_decode($jsonStr);
    

    编辑:

    另一种可能的方式:

    $.ajax({
        type: 'POST',
        url: 'ajax.php',
        data : json , // <---------------------
        ...
    

    这样,您的数据将不是有效的form-urlencoded输入,因此PHP不会将其解析为$_POST,但您仍然可以获取输入内容:

    $jsonStr = file_get_contents("php://input");
    $json = json_decode($jsonStr);
    

答案 1 :(得分:2)

嗯 - 你永远不会在AJAX请求中传递你的数据!

$.ajax({
    type: 'POST',
    url: 'ajax.php',
    data: json //<---- RIGHT HERE
    success: function(data) {
        alert(data);
        $("p").text(data);
    }
});

答案 2 :(得分:0)

您必须使用ajax请求发送obj

 $.ajax({
    type: 'POST',
    url: 'ajax.php',
    data : json,
    dataType : 'json' // for json response
    ...

答案 3 :(得分:0)

点击此处查看参考jQuery ajax

数据参数:指定要发送到服务器的数据。

试试这个:

$('#save').on('click touch', function(){
        obj = {
       "1" : {
           "1" : "hey",
           "2" : "hay"
        },              
    "2" : {
        "1" : "hey",
        "2" : "hay"
        }
}

var json = JSON.stringify( obj );

$.ajax({
    data : json,
    type: 'POST',
    url: 'ajax.php',
    success: function(data) {
        alert(data);
        $("p").text(data);
    }
});
});

答案 4 :(得分:0)

用这个替换你的ajax代码。

$.ajax({
    type: 'POST',
    url: 'ajax.php',
    data: json
    success: function(data) {
        alert(data);
        $("p").text(data);
    }
});

对于 ajax php

<?php 
    $obj = json_decode($_POST['data']);
    echo $obj;
?>