php - Ajax 调用 (jQuery) 中的错误处理不起作用

标签 php jquery ajax error-handling

我使用 jQuery 和 Ajax 将数据传递到 PHP/MySQLi 页面。 代码和查询按预期工作,但我找不到处理错误的方法。 例如当我传递到 PHP 页面的数据已存在于我的数据库中时,我想通知用户潜在的重复记录(请参阅下面代码中的注释)。

我尝试了不同的方法,但我的错误处理总是被忽略或不应用。 有人可以告诉我该怎么做吗?

jQuery(缩写):

$('#btnSave').on('click', function(e) {
    e.preventDefault();

    var vid = $.trim($('#vid').val());
    var vid2 = $.trim($('#vid2').val());
    var vid3 = $.trim($('#vid3').val());
    var mode = 'update';
        if(vid == 'new') {
            mode = 'insert';
        }

    $.ajax({
        type: 'POST',
        url: 'updateVid.php',
        data: {
            mode: mode,
            vstId: vstId, 
            vstId2: vstId2,
            vstId3: vstId3
        },
        success: function(result){
            alert('success');
        },
        error: function() {
            alert('error'); // I am unable to retrieve this in jQuery / Ajax resp. to do anything here
        }
    });
});

PHP/MySQLi(缩写):

<?php   
    require_once 'me/config.php';

    $postData = $_POST; 
    $mode = $_POST['mode'];
    $vid = $_POST['vid'];
    $vid2 = $_POST['vid2'];
    $vid3 = $_POST['vid3'];

    $conn = new mysqli($host, $username, $password, $database);
    if($conn->connect_error) {
        die("Connection Error: " . $conn->connect_error);
    }   
    if($mode == 'update') {
        $stmt = $conn->prepare("UPDATE vids v SET v.vid2 = ?, v.vid3 = ? WHERE v.vid = ?");
        $stmt->bind_param("sss", $vid, $vid2, $vid3);
        $stmt->execute();
    } else {
        $vid = '99999999';
        $vid2 = '99XXX999';

        $stmt = $conn->prepare("SELECT vid2 FROM vids WHERE vid = ?");
        $stmt->bind_param("s", $vid);
        $stmt->execute();
        $stmt->store_result();

        if($stmt->num_rows > 0) {
            echo 'Error'; // I am unable to retrieve this in jQuery / Ajax
        } else {
            $stmt->close();

            $stmt = $conn->prepare("INSERT INTO vids (vsid, vid2, vid3) VALUES (?, ?, ?)");
            $stmt->bind_param("sss", $vid, $vid2, $vid3);  
            $stmt->execute();

            echo 'Success';
        }
    }

    $stmt->close();
    $conn->close(); 
?>

提前非常感谢, 汤姆

最佳答案

这都是关于 HTTP 状态代码的。当 http 状态代码为 200/OK 时,将触发 jQuery success 函数。如果返回的 http 状态代码错误,则调用 error 函数。知道您必须在 php 响应 header 中发送 http 状态代码。

为此,请查看 php http_reponse_code()功能。

http_response_code(422);
echo json_encode($some_data);
exit();

您的 echo 输出始终是 jQuery 的有效输出。输出没有状态代码的数据始终是 200/OK 状态。如上所示,可以用PHP设置返回状态。显示 HTTP 状态代码列表 here .

关于php - Ajax 调用 (jQuery) 中的错误处理不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61596652/

相关文章:

php - 在 Symfony2 中使用 Pagerfanta 进行分页的正确方法是什么

javascript - 需要获取当前元素的id

javascript - 如何在页面上的多个元素之间共享 javascript/html?

ajax - 有什么不应该进入 HTTP header 的指南吗?

php - 显示 1 而不是全部 out 数据库

php - 将选定的mysql数据导出到excel

c# - jQuery getScript 失败

javascript - 向 HTTP 服务器发送 GET 请求;不关心回应

php - ajax提交按钮: INSERT issue

php - 使用三台服务器负载平衡 PHP Web 应用程序