#php #ajax #sweetalert #sweetalert2
Вопрос:
Я использую SweetAlert
для подтверждения, и у меня возникли проблемы с получением возвращаемых данных с моего php на ajax
Вот что я делаю
мой серверный php
//Add A voucher
public function AddVoucher ($voucher_name, $quantity, $discount)
{
try
{
$stmt2 = $this->db->prepare("SELECT * FROM vouchers WHERE voucher_name=:voucher_name");
$stmt2->bindParam(":voucher_name", $voucher_name,PDO::PARAM_STR);
$stmt2->execute();
$stmt2->fetchAll(PDO::FETCH_ASSOC);
if($stmt2->rowCount())
{
return "Failed";
}
else
{
$discount /= 100;
//name doesn't exist so proceed to registration
$stmt = $this->db->prepare("INSERT INTO vouchers (voucher_name,quantity,discount)
VALUES(:voucher_name, :quantity, :discount)");
$stmt->bindParam(":voucher_name", $voucher_name,PDO::PARAM_STR);
$stmt->bindParam(":quantity", $quantity,PDO::PARAM_STR);
$stmt->bindParam(":discount", $discount,PDO::PARAM_INT);
$stmt->execute();
return $stmt;
}
}
catch(PDOException $ex)
{
echo $ex->getMessage();
}
}
моя модель php
<?php
require_once '../database/database.php';
$voucher_name = $_POST['voucher_name'];
$quantity = $_POST['quantity'];
$discount = $_POST['discount'];
$result = $user->AddVoucher($voucher_name,$quantity,$discount);
if($result == "Failed"):
return false;
else:
return true;
endif
?>
а теперь мой интерфейс, где существует мой ajax
function SwalConfirm()
{
Swal.fire({
title: 'Are you sure?',
text: "You will an a voucher . Do you wish to proceed",
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, Proceed',
cancelButtonText: 'No, cancel!',
confirmButtonClass: 'btn bg-gradient-primary w-30',
cancelButtonClass: 'btn bg-gradient-secondary w-30',
buttonsStyling: false,
preConfirm: function()
{
return new Promise(function(resolve){
$.ajax({
url: '../model/voucher_add.php',
type: 'POST',
data:
{
voucher_name: $('#a_voucher_name').val(),
quantity: $('#a_quantity').val(),
discount: $('#a_discount').val()
},
success: function(data)
{
if(!data)
{
Swal.fire('Opps!', 'Voucher Name Already Exists. Please Edit the current voucher instead','warning').then(function(){
location.reload();
});
}
else
{
Swal.fire('Success!', 'You have successfully added a voucher.','success').then(function(){
location.reload();
});
}
}
})
// .done(function(response)
// {
// Swal.fire('Opps!', 'Voucher Name Already Exists. Please Edit the current voucher instead','warning').then(function(){
// location.reload();
// });
// })
.fail(function(){
Swal.fire('Oppss!', 'There was something wrong declining this request.','success')
})
});
}
});
}
Что я пытаюсь здесь сделать, так это то, что если текущий ваучер уже существует, то не продолжайте и не показывайте сообщение об ошибке, используя sweetalert
вместо сообщения об успешном выполнении
Комментарии:
1. используя
return
wont ничего не делать, вам нужно повторить 1 или 0 или ответить с помощью json и настроить вызов ajax для обработки с помощьюdataType: 'json'
2. также имейте в виду,
echo $ex->getMessage();
что это приведет к его разрыву или будет выглядеть как true, функция не должна перехватывать эхо и возвращать значение null, вместо этого она всегда должна возвращать значение true или false, массив нового ваучера или пустой массив. Вы можете перехватить брошенное исключение при его вызове.3. нп, не знаю, я не вижу никаких проблем с вашим вопросом
4. Не могли бы вы записать свой ответ? На самом деле это было решено сейчас только
echo '0';
за неудачу
Ответ №1:
Для тех, кто может столкнуться с подобной проблемой, решение этой проблемы заключается именно в этом
if($stmt2->rowCount())
{
echo "0";
}
тогда поймай его на себе, аякс, вот так
if(data == 0)
{
Swal.fire('Opps!', 'Voucher Name Already Exists. Please Edit the current voucher instead','warning').then(function(){
location.reload();
});
}
просто что-то в этом роде . Но также следуйте тому, что сказал Лоуренс о том, как поймать нуль
Ответ №2:
Модель php:
<?php
require_once '../database/database.php';
$voucher_name = $_POST['voucher_name'];
$quantity = $_POST['quantity'];
$discount = $_POST['discount'];
$result = $user->AddVoucher($voucher_name,$quantity,$discount);
if($result == "Failed"):
return json_encode(false);
else:
return json_encode(true);
endif
?>
Он вернет результат json_encoded в ajax