2012-10-10 36 views
6

Tôi đã viết một hàm ajax chung đơn giản có thể được gọi bằng nhiều hàm trong tập lệnh của tôi. Tôi không chắc làm thế nào để lấy dữ liệu trả về hàm ajax cho người gọi.jQuery ajax-- trả về dữ liệu cho hàm gọi

// some function that needs ajax data 
function myFunction(invoice) { 
    // pass the invoice data to the ajax function 
    var result = doAjaxRequest(invoice, 'invoice'); 
    console.dir(result); // this shows `undefined` 
} 

// build generic ajax request object 
function doAjaxRequest(data, task) { 
    var myurl = 'http://someurl'; 
    $.ajax({ 
     url: myurl + '?task=' + task, 
     data: data, 
     type: 'POST', 
     success: function(data) { 
      console.dir(data); // this shows good data as expected 
      return data; // this never gets back to the calling function 
     } 
    }); 
} 

Có cách nào trả lại dữ liệu ajax cho chức năng gọi không?

+2

số Chức năng gọi điện thoại đã chạy xong trước khi cuộc gọi AJAX thậm chí khởi xướng. Bạn có thể làm cho nó đồng bộ ... nhưng sau đó nó không phải là AJAX. – TheZ

+0

Không thể chuyển một hàm gọi lại (có thể ẩn danh) đến hàm 'doAjaxRequest' và sau đó gọi nó từ việc đóng thành công? –

+0

@ TheZ-- crap-- hiển nhiên bây giờ. Cảm ơn sự giúp đỡ với một câu hỏi ngớ ngẩn! – julio

Trả lời

11

$.ajax không đồng bộ, do đó, để lấy lại dữ liệu, bạn sẽ cần chuyển lại gọi lại đến hàm doAjaxRequest của bạn. Tôi đã thêm tham số gọi lại vào doAjaxRequest và thay vì sử dụng kết quả của doAjaxRequest mã xử lý phản hồi nằm trong chức năng gọi lại.

// some function that needs ajax data 
function myFunction(invoice) { 
    // pass the invoice data to the ajax function 
    doAjaxRequest(invoice, 'invoice', function (result) { 
     console.dir(result); 
    }); 
} 

// build generic ajax request object 
function doAjaxRequest(data, task, callback) { 
    var myurl = 'http://someurl'; 
    $.ajax({ 
     url: myurl + '?task=' + task, 
     data: data, 
     type: 'POST', 
     success: function(data) { 
      console.dir(data); // this shows good data as expected 
      callback(data); 
     } 
    }); 
} 
+0

@ Brigham-- cảm ơn! Điều đó hoạt động hoàn hảo. – julio

-1

tôi nghĩ rằng sự giúp đỡ đầy đủ cho bạn ví dụ này

function testAjax() { 
    var result=""; 
    $.ajax({ 
     url:"getvalue.php", 
     async: false, 
     success:function(data) { 
     result = data; 
     } 
    }); 
    return result; 
} 

function fun2() 
{ 

alert(testajax()) 

} 

bạn nhận thấy một điều async: false

Các vấn đề liên quan