Javascript Can';t读取json编码的数据
我正在开发一个基于php和jqueryajax的超级简单聊天工具,但是在通过ajax回调函数显示json编码的字符串时遇到了问题 以下是ajax请求: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) {
$.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)在PHP代码中指定PHP返回json可能有助于使用contentType:“application/json”时,您将无法依赖填充的$\u POST$_POST仅为表单编码的内容类型填充
$.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);
}
});