在JSON中传递PHP解析器错误?
我有一个HTML页面,它向PHP页面发送jQueryAjax调用,并期望得到JSON响应。如果PHP有一个解析器错误,该错误将返回到调用,但不是JSON格式,因此它最终会在Ajax端抛出一个“JSON.parse:unexpected character”错误 有没有办法让PHP以JSON友好的格式返回错误消息?(是的,它会将错误发送到PHP文件目录中的event.log,但我不希望每次脚本出现问题时都要直接访问它。) 编辑:有人要代码-我的意思是,类似这样的东西: 首先是“坏”的PHP脚本oops.PHP:在JSON中传递PHP解析器错误?,php,jquery,ajax,Php,Jquery,Ajax,我有一个HTML页面,它向PHP页面发送jQueryAjax调用,并期望得到JSON响应。如果PHP有一个解析器错误,该错误将返回到调用,但不是JSON格式,因此它最终会在Ajax端抛出一个“JSON.parse:unexpected character”错误 有没有办法让PHP以JSON友好的格式返回错误消息?(是的,它会将错误发送到PHP文件目录中的event.log,但我不希望每次脚本出现问题时都要直接访问它。) 编辑:有人要代码-我的意思是,类似这样的东西: 首先是“坏”的PHP脚本oo
<?php
$x = "There's no terminating semicolon"
echo json_encode($x);
?>
使用try catch块
演示如何编写处理异常的AJAX处理程序
下面是PHP代码
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/inc/ajax.inc.php';
try {
if ($_SERVER['REQUEST_METHOD'] !== "POST") {
throw new Exception('Invalid Request', 2000);
} else {
// status is true if everything is fine
exit(json_encode(
array(
'status' => true
)
));
}
} catch(Exception $e) {
echo json_encode(
array(
'status' => false,
'error' => $e -> getMessage(),
'error_code' => $e -> getCode()
)
);
exit;
}
谢谢。请提供您的代码,在尝试将PHP代码与ajax集成之前,您应该确保您的PHP代码按预期运行。我目前的“开发方法”是(a)在本地编辑HTML和PHP文件(我运行WIndows 10),(b)将HTML和PHP文件复制到我的服务器,(c)从服务器加载HTML页面,以及(d)看看会发生什么。您能推荐另一种方法吗?例如,我听说Eclipse有一个PHP开发系统?在JavaScript端的try-catch块中使用JSON.parse(然后在catch中显示未修改的数据)是可行的
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/inc/ajax.inc.php';
try {
if ($_SERVER['REQUEST_METHOD'] !== "POST") {
throw new Exception('Invalid Request', 2000);
} else {
// status is true if everything is fine
exit(json_encode(
array(
'status' => true
)
));
}
} catch(Exception $e) {
echo json_encode(
array(
'status' => false,
'error' => $e -> getMessage(),
'error_code' => $e -> getCode()
)
);
exit;
}
function jsonParse() {
try {
var json = JSON.parse(text);
}
catch(e) {
return false;
}
return json;
}
var http = new XMLHttpRequest();
var data = "username=" + name + '&email=' + email;
http.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var json = jsonParse(this.responseText);
if (!json || json.status !== true) {
console.log(json.error || 'Something Bad Happened');
return;
}
alert('Everything is Fine!');
}
}
http.open('ajax.php', 'POST', true);
http.send(data);