Leaderboard ads banner

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?

1 Câu Trả Lời

Phan Quang Phan Quang

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.

Tuyen LeBao Tuyen LeBao

Cảm ơn anh Quang bài víêt rất hay . Tuy nhiên có một vấn đề là goi ajax từ for đề nhân giá trì . nên không thể đưa vòng for vào succces . Trường hợp này xử lý như thế nào vậy Anh ?

Nội dung tối thiểu 100 ký tự

Câu Hỏi Liên Quan