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

我使用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(); 
?>

提前谢谢了,
汤姆

参考方案

因为您的AJAX调用总是成功的,所以您不会失败。如果AJAX调用失败,您将得到一个错误。

您的PHP可能会单独失败,但不会产生AJAX错误,因此,如果要使用AJAX处理PHP错误,则必须在成功函数中处理它们,但要提供一种了解PHP失败的方法。例如:

success: function(result){
  if(result->message == 'fail') {
      // handle failure here
  } 
},

请quit using alert() for troubleshooting.改用console.log()

jQuery PHP在函数中传递值与实时单击? - php

我正在尝试通过onclick传递一些值,这对我来说要快得多。但是我需要使用某种“实时”单击,并且正在查看.on()或.delegate()。但是,如果执行这些操作中的任何一个,则在followme()中传递这些值似乎很难。有没有我看不到的某种方法? <div class='btn btn-mini follow-btn' data-…

使用jQuery将值增加到attr - php

我想增加i的值。 “ for”循环不起作用。$("a[href$='.xls']").appendTo(".xl1").attr('id','xl'+i); 我搜索所有excel文件,并将它们放在容器中并增加其id的值。谢谢吉恩 参考方案 $("a[…

重新加载页面后重新填充表单的最简单方法是什么? - php

重新加载页面后重新填充表单的最简单方法是什么?在jquery,php或javascript / ajax中是否有脚本可以实现此目的?如果提交失败,我希望用户返回。我的问题是我所有的CSS悬停和背景更改无法通过keyup进行。 参考方案 如果您要在提交之前重新加载,则需要使用JavaScript捕获值并将其存储在cookie中,或者使用Ajax保存到服务器,然…

使用jQuery加载页面但不加载到容器div中 - php

我从一个下拉菜单中选择文件类型,然后我希望它在页面上触发,该页面根据选择的内容生成文件,并使用php中的header强制下载该文件。这是jQuery。$('#exportdropdown').change(function(){ var searchinput = $('#searchinput').val(); va…

如何在jQuery中使用Ajax向数组传递值并在PHP页面中获取值 - php

我有一个ajax发布参数,如下所示:$.ajax({ url:'url', data:{ary:my_ary}, ... my_ary = Array([0]=> Test Text,[1]=> test Text2)中的值现在,我需要使用如下的foreach()循环从此数组中获取值: foreach($_POST['…