01/10/2018, 09:28
Không so sánh được dữ liệu trả về trong ajax!
Tôi có đoạn code php sau:
<?php
session_start();
require_once("connection.php");
if(isset($_POST['id']) && filter_var($_POST['id'],FILTER_VALIDATE_INT,array('min_range'=>1))){
$id=$_POST['id'];
}
if(isset($_POST['dulieu'])){
$dulieu=$_POST['dulieu'];
$lenhkiemtra="SELECT * FROM `KetQua` WHERE `id`='$id' and `KetQua`='$dulieu'";
$sql_kiemtra = mysqli_query($conn,$lenhkiemtra);
$num_rows_kiemtra = mysqli_num_rows($sql_kiemtra);
if($num_rows_kiemtra!=0){
echo '1';
die;
}
else{
echo '2';
die;
}
}
?>
Và javascript như sau:
function KiemTraDapAn(dulieu){
var KetQua;
$.ajax({
url: 'KiemTra.php',
type: 'POST',
data : {
id : 123213,
dulieu : dulieu
},success: function(string){
KetQua = string;
if(KetQua =='1'){return 1;}
else if(KetQua =='2'){return 2;}
else if(KetQua =='3'){return 3;}
}
});
}
Và một code sửa lý thông báo như sau:
var audio1 = new Audio('https://s3.amazonaws.com/duolingo-data/s3/sounds/right_answer.mp3');
var audio2 = new Audio('https://s3.amazonaws.com/duolingo-data/s3/sounds/wrong_answer.mp3');
function reply(){
var replyhere= $('#myreply').val();
var BoolFT = KiemTraDapAn(replyhere);
if(BoolFT==1){
audio1.play();
}else if(BoolFT==2){
audio2.play();
}
}
Thực ra là có kết quả trả về ở phần ajax nếu mình cho nó hiển thị trực tiếp ra ngoài màn hình, nhưng khi so sánh thì lại không được và khi mình kiểm tra kiểu dữ liệu đó thì nó trả về là “không xác định”
Bài liên quan
Ajax là lập trình async, nghĩa là thời điểm gọi hàm thì chưa có kết quả ngay mà phải mất 1 khoảng delay nên không thể return như thế được
bạn viết function lạ nhỉ, nhận vào DapAn mà k thấy dùng, khai báo KetQua cũng k dùng, trong khi dulieu chưa có thì lại dùng gửi ajax
Mở F12 lên đọc lỗi nhé.
F12 lên rồi, không có gì nhé bạn, còn mấy cái lỗi trong code là mình sử một số chỗ nên một số quên chưa sửa để tránh lộ code gốc ý mà
vậy phải giải quyết như thế nào code mới chạy?
code đem đi hỏi còn sợ lộ code gốc? hay ta.
Nếu không lỗi gì thì mở source ra mà debug.
Ajax về nguyên tắc là nó chạy bất đồng bộ. callback success sẽ được gọi khi request thành công. Do đó đoạn code so sánh của bạn chạy trước khi callback success được gọi, cụ thể hơn là nó chưa chạy qua câu lệnh này : KetQua = string; Do đó biến KetQua sẽ là null tại thời điểm bạn so sánh.
edit lại callback success thành:
success: function(string){
KetQua = string;
if(KetQua ==‘1’){return 1;}
else if(KetQua ==‘2’){return 2;}
else if(KetQua ==‘3’){return 3;}
}
VỚi lại đặt tên biến kỳ cục quá. Đặt tên tiếng anh đi bạn.
mình đã sửa như thế và kết quả là… Vẫn không chạy được :V
À mà thôi mình fix được lỗi rồi :))