Javascript Can';t读取json编码的数据

Javascript Can';t读取json编码的数据,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我正在开发一个基于php和jqueryajax的超级简单聊天工具,但是在通过ajax回调函数显示json编码的字符串时遇到了问题 以下是ajax请求: $.ajax({ url: "/pages/core.chat.php", type: "POST", dataType: "json", contentType: "application/json", data: {'action' : 'loadChat'}, success: function(resp) {

我正在开发一个基于php和jqueryajax的超级简单聊天工具,但是在通过ajax回调函数显示json编码的字符串时遇到了问题

以下是ajax请求:

$.ajax({
  url: "/pages/core.chat.php",
  type: "POST",
  dataType: "json",
  contentType: "application/json",
  data: {'action' : 'loadChat'},

  success: function(resp) {
    $("#chatBody").html(resp.refreshChat);
 }

});
这是来自.php文件

if ($_POST['action'] == 'loadChat') {   
    $resp = array("refreshChat"=>$chat);
    echo json_encode($resp);
}
其中$chat包含消息文本。 我得到的只是一张空白页。 另外,如果我发送ajax请求时不带
数据类型
内容类型
参数,并且运行回调时不带
.refreshChat
,它会打印json编码的字符串,因为它是
{“refreshChat”:“chatmessage”}
,那么问题可能在于我传递这些参数的方式?只是猜测而已。 我对jQueryAjax非常陌生,我已经检查过、双重检查过、三次检查过,但我不知道我做错了什么。
感谢所有能够创造奇迹的人。

使用
标题(“内容类型:application/json”,true)
 $.ajax({
  url: "/pages/core.chat.php",
  type: "POST",
  dataType: "json",
  contentType:"application/x-www-form-urlencoded",
  data: {'action' : 'loadChat'},

  success: function(resp) {
    $("#chatBody").html(resp.refreshChat);
 }

});

如果你想发送contentType:application/json,你应该实际发送json,但你没有这样做。

我遇到了一个与你的问题类似的问题。下面是我的答案

PHP有很多方法可以获取POST数据

1.$\u POST,通常用于表单数据

2.$HTTP\u RAW\u POST\u数据,如果您无法从$\u POST获取数据,请尝试此项


3.$raw\u post\u data=文件获取内容('php://input","r",;基本上与$HTTP\u RAW\u POST\u数据相同,但更有效。

您的参数
数据类型和
数据
没有问题,问题在于
内容类型:“application/json”
,如果您使用Chrome开发工具或类似工具检查服务器响应,您应该会看到以下内容:

<br />
<b>Notice</b>:  Undefined index: action in <b>core.chat.php</b> on line <b>x</b><br />
更改PHP文件以获取json数据并对其进行处理:

$data = json_decode(file_get_contents('php://input'), true);
if($data['action'] == 'loadChat')
   //do something
解决方案2 从Ajax调用中删除
contentType
参数,默认情况下为
'application/x-www-form-urlencoded;charset=UTF-8'
,这是您从一开始就希望看到的。

解决方案1 您可以并且应该设置内容类型标题:

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

# Code ...

if ($_POST['action'] == 'loadChat') {   
    $resp = array("refreshChat"=>$chat);
    echo json_encode($resp);
}

文档:

php中的$chat var中有什么?如果你使用
console.log(resp)
你得到了什么我只是好奇你是否声明了这个->$resp=array();删除“contentType:“application/json”,“它是在ajax请求
数据类型:“json”中指定的,
事实上@guradio,javascript代码指定它希望获得json响应,但web服务器可能会使用不同的MIME类型进行响应。特别是在PHP代码中放置标题可能有助于调试问题。这无法解决问题,请在发送答案之前测试代码
<?php
header('Content-Type: application/json');

# Code ...

if ($_POST['action'] == 'loadChat') {   
    $resp = array("refreshChat"=>$chat);
    echo json_encode($resp);
}
$.ajax({
    url: "/pages/core.chat.php",
    type: "POST",
    dataType: "json",
    contentType: "application/json",
    data: {'action' : 'loadChat'},

    success: function(resp) {
        // JSON.parse solution
        resp = JSON.parse();
        $("#chatBody").html(resp.refreshChat);
    }

});