正在读取php文件中通过ajax发送的json对象


Reading json object sent via ajax in php file

我试图解决一个问题,即在php文件中读取通过ajax请求发送的json对象,并且在控制台中保持gettin为null。

Javascript文件

//create function to send ajax request
function ajax_request(){
  console.log("hello");
 var post_data = {
    "news_data" : 'hello',
    "news_date" : '1st march'
}
$.ajax({
    url : 'index.php',
    dataType : 'json',
    type : 'post',
    data : post_data,
    success : function(data){
        console.log(data);
    }
 });
}
//on click event
$('#news_post_button').on('click', ajax_request);

和php文件,这只是为了测试我得到的

<?php
 header('Content-Type: application/json');

  $aRequest = json_decode($_POST);
  echo json_encode($aRequest[0]->news_data);
?>

尝试使用json_last_error函数。并将你的帖子打印成字符串:

print_r($_POST);
echo '<br /> json_last_error: '.json_last_error();

通过这种方式,你会看到你得到了什么,以及可能出了什么问题。

为了测试这类东西,我建议Postman chrome扩展。

您根本没有发送JSON对象。

您正在向jQuery传递一个对象,因此它将使用标准的表单编码对其进行序列化。

<?php
   header('Content-Type: application/json');
   echo json_encode($_POST["news_data"]);
?>

如果您想实际发送JSON文本,那么您需要:

  • 设置请求的内容类型
  • 将数据编码为JSON,并将其作为字符串传递给data

请参阅此答案以获取示例。

要读取JSON,您需要根据这个答案/

读取STDIN而不是$_POST

您可以直接在$POSTvar中读取对象的属性,如下所示:

$_POST['news_data'] and $_POST['news_date']

您可以通过浏览器的开发工具在网络选项卡中检查post-var。

$.post选项的dataType属性指定您希望从服务器接收作为响应的数据格式,而不是您发送到服务器的数据格式。如果通过POST方法发送数据,就像使用$.POST一样,则无需在服务器端调用$aRequest = json_decode($_POST);。数据将作为一个普通的PHP数组提供。

如果您只想从服务器获得news_data字段作为响应,那么您的服务器端脚本应该如下所示:

<?php
header('Content-Type: application/json');
$post = $_POST;
echo json_encode($post['news_data']);
?>

请注意,您应该检查密钥news_data是否已设置。