我遇到了一些AJAX调用问题。 AJAX用于更新表中的行,然后从PHP文件返回“成功”或“失败”。然后在AJAX中检查响应以查看是否收到“成功”或“失败”,这是给我带来麻烦的部分。
这是通过检查响应是否等于“成功”或“失败”来完成的,如下所示:
// Called on success
request.done(function (response, textStatus, jqXHR) {
if (response == "success") {
$("#register-vehicle-message-failure").css('display', 'none');
$("#register-vehicle-message-success").css('display', 'block');
$("#register-vehicle-text-success").html("SUCCESS");
} else if (response == "failure") {
$("#register-vehicle-message-success").css('display', 'none');
$("#register-vehicle-message-failure").css('display', 'block');
$("#register-vehicle-text-failure").html("FAILURE");
}
});
基本上应该显示一条消息,表明它是否成功,但是没有显示任何消息。
我后来尝试了其他一些显示出一些结果的东西。我用'else'替换'else if','else block'中的代码开始运行。
// Called on success
request.done(function (response, textStatus, jqXHR) {
if (response == "success") {
$("#register-vehicle-message-failure").css('display', 'none');
$("#register-vehicle-message-success").css('display', 'block');
$("#register-vehicle-text-success").html("HEY");
} else {
$("#register-vehicle-message-success").css('display', 'none');
$("#register-vehicle-message-failure").css('display', 'block');
$("#register-vehicle-text-failure").html(response);
}
});
这导致始终在'else'块中运行代码,无论行是否更新。我还更改了文本的html以显示响应(else块中的最后一行),并且显示的响应实际上是正确的!
如果行成功更改,那么'if(response ==“success”)'比较将不起作用,但'else block'中的代码运行并显示消息“success”(来自ajax的响应) )。如果行无法更新,则会执行相同操作,其中“失败”显示为消息。
因为我从PHP文件(成功或失败)收到了正确的响应,所以我认为问题在于进行比较。有人可以解决这个问题吗?感谢。
完整的PHP代码
<?php
require_once('validation_util.php');
session_start(); // - Begin session
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
if (isset($_POST['register_iccid']))
{
// Retrieve the data inputted by a registering user and sanitize + format the data
$iccid = sanitizeData($_POST['register_iccid']);
require_once 'dbconnect.php';
$conn = getConnection(); // - Connect to DB
$user_id = 0;
// Store the user's ID (must be logged in via session or cookie)
if (isset($_SESSION['user_id']))
$user_id = $_SESSION['user_id'];
else if (isset($_COOKIE['remember_user']))
$user_id = $_COOKIE['remember_user'];
$sqlstatement = $conn->prepare("UPDATE `vehicles` SET `owner_id` = :owner_id WHERE `vehicle_iccid` = :iccid");
// Bind the values
$sqlstatement->bindValue(':owner_id', $user_id, PDO::PARAM_INT);
$sqlstatement->bindValue(':iccid', $iccid, PDO::PARAM_STR);
$sqlstatement->execute();
// If a row is returned (Only 1 row should be returned)
if ($sqlstatement->rowCount() == 1)
echo "success";
else
echo "failure";
$conn = null; // - Close connection
}
}
?>
这将显示“成功”或“失败”,以显示sql更新是否成功。
完整的AJAX代码
$(document).ready(function () {
var request; // - Ajax request
$('#register-vehicle-form').submit(function (e) {
// Abort any pending requests
if (request) {
request.abort();
}
var url = "../php/vehicle_registration.php"; // - Php file path to request from
var $form = $(this); // - Store form in var
var $fields = $form.find("input");
// Serialize form data
var serializedData = $form.serialize();
// Disable form elements (after the form data has been serialized)
$fields.prop("disabled", true);
// Fire the request to vehicle_registration.php file
request = $.ajax({
url: url,
type: "post",
data: serializedData
});
// Called on success
request.done(function (response, textStatus, jqXHR) {
if (response == "success") {
$("#register-vehicle-message-failure").css('display', 'none');
$("#register-vehicle-message-success").css('display', 'block');
$("#register-vehicle-text-success").html("SUCCESS");
} else {
$("#register-vehicle-message-success").css('display', 'none');
$("#register-vehicle-message-failure").css('display', 'block');
$("#register-vehicle-text-failure").html(response);
}
});
// Called on failure
request.fail(function (jqXHR, textStatus, errorThrown) {
console.error("Error: " + textStatus, errorThrown);
});
// Called always
request.always(function () {
$fields.prop("disabled", false); // - Re-enable the input fields
});
// Prevent default behaviour of form, so we can submit it here
e.preventDefault();
});
});