在JSON中传递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

我有一个HTML页面,它向PHP页面发送jQueryAjax调用,并期望得到JSON响应。如果PHP有一个解析器错误,该错误将返回到调用,但不是JSON格式,因此它最终会在Ajax端抛出一个“JSON.parse:unexpected character”错误

有没有办法让PHP以JSON友好的格式返回错误消息?(是的,它会将错误发送到PHP文件目录中的event.log,但我不希望每次脚本出现问题时都要直接访问它。)

编辑:有人要代码-我的意思是,类似这样的东西:

首先是“坏”的PHP脚本oops.PHP:

<?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);