jQuery AJAX:成功时返回request.fail


jQuery AJAX: Returns request.fail upon success

有以下jQuery AJAX调用。它运行正常并完成 PHP/MySQL 操作,但返回request.fail函数而不是正常的完成/成功。如果您注释/删除 MySQL 查询,则工作正常。

做了很多搜索,并相信这与dataType有关,我已经尝试了texthtml,并根据其他帖子""。尝试使用 html 作为dataType,只是在 PHP 代码之后更改标准 HTML/文本输出的echo "Success.";,但没有运气。任何帮助将不胜感激。

此代码是一个更大的项目的一小部分,该项目已出于问题而被隔离。$variable只是一个示例,在范围内(不会导致问题)。

调用文件:

<script type="text/javascript">
        function ajaxCall() {
            var request = $.ajax({
                url: '<?php echo "ajax.php?variable=$value"; ?>',
                type: "GET",            
                dataType: "html"
            });
            request.done(function(msg) {
                alert(msg);
            });
            request.fail(function(jqXHR, textStatus) {
                alert( "Request failed: " + textStatus );
            });
        }
</script>

AJAX 文件:

<?php
    $variable = $_GET['variable'];
    $sign = mysqli_query(mysqli_connect('localhost', 'user', 'password', 'database'), "INSERT INTO `Table` (`Column`) VALUES ('$variable')");
    echo "Success.";
?>

就像我上面说的,你需要处理错误报告,让这一切按照你想要的方式工作。我会从构建从您的PHP返回的错误开始,然后将结果构建回JSON,如下所示:

<?php
ini_set('display_errors', false);
$variable = $_GET['variable'];
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "test";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    $json_arr['response'] = FALSE;
    $json_arr['message'] = "Connection failed: " . $conn->connect_error;
} else {
    $sql = "INSERT INTO `tbl1` (`col1`) VALUES ('$variable')";
    $result = $conn->query($sql);
    if ($result) {
        $json_arr['response'] = TRUE;
        $json_arr['message'] = "success";
    }else{
        $json_arr['response'] = FALSE;
        $json_arr['message'] = $conn->error;
    }
}
$conn->close();
header('Content-Type: application/json');
echo json_encode($json_arr);

设置后,可以使用 AJAX 通过以下方式获取结果:

function ajaxCall() {
    var request = $.ajax({
        url: '<?php echo "success.php?variable=$value"; ?>',
        type: "GET",
        dataType: "json"
    });
    request.done(function (result) {
        if (result.response) {
            alert(result.message);
            // your success code
        } else {
            alert(result.message);
            // your fail code
        }
    });
    request.fail(function (jqXHR, textStatus, error) {
        alert("FAIL");
        console.log(textStatus);
        console.log(error);
    });
}
ajaxCall();
/*

js */

function callFunction() {
    $.ajax({
        url: <url>
        type: 'GET',
        data: {},
        dataType: 'json',
        success: function(response) {
            alert(response.msg)
        },
        error: function() {
            alert('Error!');
        }
    });
    return false;
}

/*.php*/

echo json_encode([
    'msg' => 'Message'
]);
exit