Jquery Ajax response quá nhanh

Gởi anh/chị,

Hiện em đang học về Jquery những bị lỗi ở một chỗ là. Khi em truyền dữ liệu dưới dạng ajax

$.ajax({
		url: './includes/func.php',
		cache: false,
		type: 'POST',
		data: {
			     a:a,
                             b:b,
			}, 
		dataType: 'json',
		success: function(data){}

Là nó sẽ truyền dữ liệu sang trang “func.php” 1 loạt, 1-2-3-4-5…v.v…Rồi nó trả về kết quả quá nhanh, trong khi tiến trình (1) chưa xử lý xong thì tiến trình 2 chen ngang. Làm sao để xử lý như dạng hàng đợi 1 by 1 ạ? Nếu em set timeout trên 5s thì nó mới xử lý đc từng data gởi qua 1. Nhiều khi cũng trả về kết quả sai vì quá nhanh hoặc bị chen ngang hay gì đó

trong php có hàm sleep bạn truyền vào thời gian cần thực hiện thì nó sẽ trả về chậm hơn
cú pháp đây sleep(your time);

2 Likes

Bản chất ajax là bất đồng bộ, bạn muốn nó thực hiện tuần tự thì nhét vào callback, như ví dụ trên thì để vào hàm success là được

3 Likes

Cái này đơn giản. Nếu mình hiểu đúng ý bạn thì bạn chỉ cần thêm cái này vào là xong :slight_smile:
async: false

2 Likes

Đừng bao giờ bắt code ở trình duyệt chạy sync. Nó sẽ block toàn bộ trang web

2 Likes

block đơ luôn, phải để trong success thôi

1 Like

Cám ơn anh/chị đã giải đáp cho e!

Em chỉ nôm na hiểu là từ dữ liệu sau khi xử lý mà ajax lấy về đổ vào success: function(data){}. Vậy mình tạo 1 function để xử lý các thông tin đổ về đó riêng biệt ngoài ajax rồi trong ajax phần success: function(data){} mình gọi function đó để data đổ ngược vào function mình đã tạo để xử lý & xuất ra đúng không ạ!

Anh chị có thể viết cơ bản cách thức để em có thể xử lý trong success: function(data){} & trong function đã tạo không ạ!

Mong a/chị không phiền lòng vì e hỏi hơi lang mang!

Mình chẳng hiểu bạn đang nói gì cả. Bản chất của JS là bất đồng bộ (async) nên khi VM rảnh thì nó sẽ xử lí câu lệnh tiếp theo. Để đảm bảo thứ tự thực thi câu lệnh thì mới có cái callback.

Gọi ajax get lần đầu, khi có kết quả thì nó sẽ gọi hàm success mà bạn đã định nghĩa sẵn kèm với kết quả trả về.

Lúc này, bạn trong hàm success bạn sẽ gọi ajax get lần thứ 2, tiếp tục như vâỵ cho 5 cái theo ý bạn.

Tuy nhiên làm vậy sẽ dẫn đến cái callback hell, nên lúc này bạn sẽ tiếp tục dùng một trong các giài pháp sau:

1 Like

Có lẽ bạn nhầm (hoặc mình), vì theo mình biết thì chỉ khi dùng Ajax hay trong Nodejs mới là async, còn bản chất Js là sync và single-threaded chứ?

À. Bạn nói đúng rồi :smiley:

Describing JavaScript as asynchronous is perhaps misleading. It’s more accurate to say that JavaScript is synchronous and single-threaded with various callback mechanisms.

bạn nói đúng rồi đấy, tiến lên xử nó đi :grin:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?