【发布时间】:2020-08-19 03:22:13
【问题描述】:
我使用 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 失败的方法。
标签: php jquery ajax error-handling