php 如何获取ajax 发送的json字符串??

前端:

$.ajax({
    url: url , 
    method: 'post' , 
    contentType: 'application/json' ,
    data: JSON.stringify({
        name: 'test'
    })
});

服务端:

print_r($_REQUEST); // []
print_r($_POST); // []
print_r($_GET); // []

// 最后!
print_r(file_get_contents('php://input')); // {"name": "test"}

是否发送的 json 字符串只能通过 php://input 这种方式获取?通过这种方式进行前后端数据交互有什么优势??

阅读 5.9k
8 个回答
contentType: 'application/x-www-form-urlencoded'

1.php的底层代码会对http请求做一个基本的处理,然后放进$_GET,$_POST,$_REQUEST
2.当请求是原生json字符串时,php底层无法处理,所以只能从php://input中获取
3.对于强类型语言,用json传的好处是他们可以把json转为对象,对于php其实并没有好处

var json_data = JSON.stringify({
        name: 'test'
    });
$.ajax({
    url: url , 
    method: 'post' , 
    data: {
        p_data:json_data
    }
});

$_POST['p_data'];

网上查了一下,楼主所示的传值格式用的是raw,该格式常用于传递多层嵌套的数据例如

{
  "data": {
    "data":{
      "data":"value"
    }
  }
}

如上图的数据,并不方便使用键值对的形式传参的时候就可以用raw。
至于数据接收方式可参考该网址:
Postman发送 raw数据接收问题

当然也可以把该数据弄成json字符串以键值对的形式传过去,后端需要转换json才能操作

emmmm, 从php://input 中获取数据,然后转码解析:
参考代码:https://github.com/DXkite/sud...

function getjson()
{ 
    }
    if ($_SERVER['REQUEST_METHOD']!=='POST' && array_key_exists('CONTENT_TYPE', $_SERVER) && preg_match('/json/i', $_SERVER['CONTENT_TYPE'])) {
        return null;
    }
    $inputData=file_get_contents('php://input');
    $data =json_decode($inputData, true);
    if (json_last_error()!==JSON_ERROR_NONE) {
        throw new Exception(json_last_error());
    }
    return $data;
}

你这ajax写的忒麻烦了,直接

$.ajax({
    url: url,
    method: 'POST',
    data: {name: 'test'}
});

就行了,很多东西扔给jQ来处理就好。

字符串的话,使用 file_get_contents('php://input') 就行了。

php接收post数据,一般就两种方式:
1.$_POST
2.file_get_contents('php://input')

一般 ajax 库两种方式都支持,但默认支持的方式不一样:

  1. jQuery的 ajax ,php后端直接使用 $_POST 接收就可以了。
  2. axios ,默认情况下需要用 第二种方法接收。

但你可以修改相应的配置,想了解的话,自己搜索一下。

另外,jQuery的ajax支持多层嵌套,而 axios 不支持。

$_POST,$_GET,是获取表单数据的,
也就是Content-Type=application/x-www-form-urlencodedmultipart/form-data

一般用json类型传递参数适合比较复杂的交互,通过json传递,后端可以直接映射到一个实体上,比较方便后端代码编写。同时,js对json格式也支持的比较友好,很多前端开发,通过json也比较方便处理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题