php - 在 jquery/ajax 中使用错误函数

标签 php jquery ajax error-handling

我正在使用 jquery 开发 ajax/php 中的连接模块。我需要从 php 向 ajax 抛出异常,以指示电子邮件或密码是否为假。

我在网上搜索了一种使用 jquery ajax 提出的“错误”功能的方法。找到了一些解决方案,它们都不起作用。

尝试抛出一个 php 异常:错误函数没有捕获它;尝试通过发送 json 编码数据来避免使用错误函数:无法在成功函数中使用它...
错误函数似乎只捕获服务器错误,这真的很不有趣。

请任何人都可以帮我找到一种通过 ajax 从 php 传达错误的方法吗?

最佳答案

设置请求statuscode在对 4XX 或 5XX 的 php 响应中。这将使您最终进入 error/fail打回来。

我不一定必须是列表中的一个值。例如,您可以创建自己的:

StatusCode: 550
StatusText: "My Custom Error"

如果我没记错的话,它在 PHP 中看起来像这样:
header('HTTP/1.0 550 My Custom Error');

最后,将错误详细信息发送给客户端,以通知他们出了什么问题。您可以将信息放在标题中,也可以使用 json_encode() 序列化异常。
<?php

try {
    if (some_bad_condition) {
        throw new Exception('Test error', 123);
    }
    echo json_encode(array(
        'result' => 'vanilla!',
    ));
} catch (Exception $e) {
    echo json_encode(array(
        'error' => array(
            'msg' => $e->getMessage(),
            'code' => $e->getCode(),
        ),
    ));
}

?>

客户端:
$.ajax({
    url: 'page.php',
    data: { 'some_bad_condition': true }
}).done(function(data){

    console.log('success!', data);

}).fail(function(jqXhr){

    var errorObject = $.parseJSON(jqXhr.responseText);
    console.log('something went wrong:', errorObject);
    //jqXhr.status === 550
    //jqXhr.statusText === 'My Custom Error'

});

不要忘记在 PHP 文件中指定正确的 mimetype。这样 jQuery 就会知道它是一个 JSON 响应,而无需您明确指定它。
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

关于php - 在 jquery/ajax 中使用错误函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19446316/

相关文章:

javascript - jqplot 单杠问题

java - 对 PHP 页面的 HTTP 请求,尝试登录

php - 服务器端的 CURL HTTP 身份验证

php - jquery 动态添加行有问题

php - Ajax和Php表单数据保存到MS SQL表

javascript - 如何通过ajax接收、发送和存储json数组

javascript - 如何循环此 JSON 并将内容附加到 div 中的 html 中?

PHP:没有文件扩展名的文件名 - 最好的方法?

php - GuzzleHttp 尝试在 php 7 安装中将 JSON 字符串解码为数组时出错

jquery - 如何在 React 中缓存 jQuery ajax 结果?