•
AJAX: Trả về dữ liệu response data
Em có một hàm getDataFromURL()
dùng để lấy dữ liệu trên server thông quan gọi AJAX. Đoạn code của hàm này như sau:
var result;
function getDataFromURL(url) {
$.ajax({
url: $url,
success: function (response) {
result = response.data; // gán giá trị data response vào biến global
}
});
}
Ở trên giá trị dữ liệu data lấy từ đối tượng response trả về được gán vào biến result
được khai báo ở phạm vi global. Tuy nhiên khi gọi hàm getDataFromURL()
thì giá trị trả về luôn là undefined
ngay cả khi response.data
là một giá trị khác (em kiểm tra kết quả trả về của AJAX request trong tab network của Chrome):
getDataFromURL();
console.log(result); // undefined
Có cách nào để lấy được giá trị trả về response
khi gọi AJAX như trong trường hợp này không vậy mọi người?
Bạn cần hiểu về khái niệm callback khi sử dụng ajax:
$.ajax({ url: '', success: function (response) { result = response.data; } });
Hàm
success
chỉ được gọi khi nào server trả về kết quả success (VD: status code = 200), ví dụ server xử lý mất 30s thì 30s sau hàm đó mới được gọi, tuy nhiên script vẫn tiếp tục chạy nên ngay dưới đó bạn in ra sẽ không có giá trị.Cách xử lý đơn giản nhất là bạn bỏ hết code cần làm vào trong
success
.