Archive

Posts Tagged ‘bat dong bo voi ajax’

Vấn đề đồn bộ và bất đồng bộ với ajax hoặc jquery ajax

Async là bất đồng bộ. Mặc định giá trị của chúng là true => Bất đồng bộ. Nhưng khi sử dụng 1 số ứng dụng, nhất là ajax lồng nhau hoặc jquery ajax lồng nhau thì phải khai báo là false => Đồng bộ. Vì sao ?

Xét ví dụ sau:

<script>
$(document).ready(function(){
$(“a.test”).click(function(){
thamso=false;
$.ajax({
url:”test_ajax.php”,
type:”get”,
 async:true,
success:function(kq){
thamso= kq;
}
})

alert(thamso);
})
})
</script>
</head>

<body>
<a href=”#” class=”test”>Click me</a>
</body>

Tạo file test_ajax.php với nội dung sau:

<?php
echo “true”;
?>

Khi chạy ví dụ này. Kết quả sẽ luôn ra false. Bởi vì bất đồng bộ, cho phép nhiều sự kiến diễn ra cùng lúc. Khi đó thay vì phải đợi ajax trả kết quả về thì nó đã làm luôn hành động alert() dưới ajax. Dĩ nhiên là lấy tham số mặc định ở trên mà chúng ta đã gán là false. Vậy với async:true. Nó sẽ thực hiện hành động bất chấp ajax trả về kết quả gì.

Để giải quyết nó ta thay đổi async từ true thành false thì kết quả sẽ trả về true đúng với yêu cầu của chúng ta:

<script>
$(document).ready(function(){
$(“a.test”).click(function(){
thamso=false;
$.ajax({
url:”test_ajax.php”,
type:”get”,
async:false,
success:function(kq){
thamso= kq;
}
})
alert(thamso);
})
})
</script>
</head>

<body>
<a href=”#” class=”test”>Click me</a>
</body>

Như chúng ta thấy, nếu quy là đồng bộ. Kịch bản sẽ được chạy tuần tự, và chúng sẽ đợi nhau để thực thi các hành động liên đới. Chẳng hạn ví dụ ở trên là phải thực thi hành động của ajax rồi mới thực thi các hành động bên dưới.

Nguần:  http://www.qhonline.info/forum/showthread.php/3706-thac-mac-ve-async-trong-ajax-va-jquery