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

Joo*_*bma 0 javascript php ajax json object

我正在尝试将我的javascript对象发送到PHP JSON.stringify()

使用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);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

ajax.php:

<?php 
    $obj = json_decode($json);
    echo $obj;
?> 
Run Code Online (Sandbox Code Playgroud)

但是这段代码返回一个错误,说明$json没有定义.我不知道为什么这不起作用.

Hen*_*los 5

有两个问题.

  1. 您没有随请求发送任何数据
  2. 这不是你从PHP中获取请求值的方式

首先,添加此*:

$.ajax({
    type: 'POST',
    url: 'ajax.php',
    data : { json: json }, // <---------------------
    ...
Run Code Online (Sandbox Code Playgroud)

*这只是因为jQuery实现会自动将任何非字符串数据参数转换为form-urlencoded查询字符串.查看文档.

然后,在PHP中,您应该:

$jsonStr = $_POST['json'];
$json = json_decode($jsonStr);
Run Code Online (Sandbox Code Playgroud)

编辑:

另一种可能方式:

$.ajax({
    type: 'POST',
    url: 'ajax.php',
    data : json , // <---------------------
    ...
Run Code Online (Sandbox Code Playgroud)

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

$jsonStr = file_get_contents("php://input");
$json = json_decode($jsonStr);
Run Code Online (Sandbox Code Playgroud)