我使用 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/