【发布时间】:2016-03-17 17:21:42
【问题描述】:
我最近将我的开发服务器从 PHP 5.4 升级到 PHP 5.6,但在尝试对其进行测试时遇到了一个奇怪的错误。我所有的 PHP 代码都通过我的主视图以数组或字符串的形式返回数据,主视图使用以下代码将数据作为 JSON 发送回任何 Ajax 查询。 (出于测试目的,我停用了 MIME 类型)
public static function SendData($data)
{
$response = array(
'status' => true,
'message' => $data
);
//header('Content-type: application/json');
exit(json_encode($response, JSON_HEX_APOS));
}
我的 Javascript 代码使用该数据,通常立即将其解析为 JSON,因为 MIME 类型告诉 JQuery 这样做并处理它。它在 PHP 5.4 中运行良好,但自从我升级后,我的响应被 Jquery 修改了。查看服务器在 FireBug 中的响应,我发现它是有效的 JSON(使用 JSONlint 测试)
{"status":true,"message":"Didier Tartempion|dtartempion@example.com|Gestion de commerce"}
但是当我在 firebug 中检查以下 Jquery 代码时
$.ajax({
url:"Connect.php",
type : 'POST',
data : data,
success:function(result)
{
//JSON processing, for now I debugg with
alert (result);
},
error: function(qXHR, textStatus, errorThrown)
{
alert(textStatus);
}
});
成功的结果变量实际上包含我的格式奇怪的响应,使用firebug watch时看起来像这样:
"\n{"status":true,"message":"Didier Tartempion|dtartempion@example.com|Gestion de commerce"}"
因此,JQuery 无法解析这个并且 JSONlint 说它无效。是否有来自 PHP5.6 甚至可能导致这种奇怪行为的新服务器的东西?
谢谢
【问题讨论】:
-
您需要在 ajax 中定义数据类型,否则返回的结果将是纯文本。 dataType = 'json'
-
不应该是“header('Content-type: application/json');”做这份工作?无论哪种方式,我都尝试过,但我仍然得到一个解析错误,因为我的响应是 JSON Jquery 获取的无效。