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”

Quân viết 11:34 ngày 01/10/2018

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

viết 11:38 ngày 01/10/2018

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é.

HotaVN viết 11:45 ngày 01/10/2018

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à

HotaVN viết 11:34 ngày 01/10/2018

vậy phải giải quyết như thế nào code mới chạy?

viết 11:31 ngày 01/10/2018

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.

Le Hoai viết 11:34 ngày 01/10/2018

,success: function(string){
KetQua = string;
}
});
if(KetQua ==‘1’){return 1;}
else if(KetQua ==‘2’){return 2;}
else if(KetQua ==‘3’){return 3;}

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.

HotaVN viết 11:36 ngày 01/10/2018

if(KetQua ==‘1’){return 1;} else if(KetQua ==‘2’){return 2;} else if(KetQua ==‘3’){return 3;}

mình đã sửa như thế và kết quả là… Vẫn không chạy được :V

HotaVN viết 11:35 ngày 01/10/2018

À mà thôi mình fix được lỗi rồi :))

Bài liên quan
0