2012-10-24 47 views
5

tôi có chức năng sau:Cách lấy dữ liệu từ ajax.done()?

$.ajax({ 
    url: "../../getposts.php" 
}).done(function(posts) { 
    var postsjson = $.parseJSON(posts); 
}); 

Làm thế nào để sử dụng biến postsjson ngoài .done() chức năng, hoặc làm thế nào để khai báo nó toàn cầu?

Tôi không thể chuyển nó sang chức năng khác, vì tôi muốn sử dụng mảng sau này, và không phải khi ajax được hoàn thành.

+0

Chào mừng bạn đến với thế giới tuyệt vời của ** async **! Bạn không thể làm điều đó. – SLaks

+1

Bạn chỉ có thể khai báo một biến toàn cục bên ngoài hàm của bạn và đặt biến đó bằng 'bài viết' khi nó đã sẵn sàng. Tuy nhiên, không có cách nào để biết chắc chắn khi biến toàn cục đó sẽ có bất kỳ thứ gì trong đó. – Blazemonger

+0

Trong JS, bất kỳ biến toàn cục nào về mặt kỹ thuật đều là thuộc tính của đối tượng 'window'. Vì vậy, bạn sẽ có thể đặt 'window.myVar = posts;' và voila - tức thì toàn cục. – Blazemonger

Trả lời

5

Nếu bạn chỉ xác định các biến bên ngoài của cuộc gọi ajax:

var postsjson; 

$.ajax({ 
    url: "../../getposts.php" 
}).done(function(posts) { 
    postsjson = $.parseJSON(posts); 
}); 

Sau đó, bạn có thể sử dụng nó ở bên ngoài. Tương tự như vậy, nếu bạn chỉ cần rời khỏi var, nó sẽ khai báo nó trên toàn cầu, nhưng điều đó không được khuyến khích.

Như được chỉ ra bởi SLaks, bạn sẽ không thể sử dụng ngay dữ liệu bạn nhận được từ cuộc gọi AJAX, bạn có thể đợi chức năng done trước khi nó được khởi tạo cho bất kỳ điều gì hữu ích.

+1

Điều đó sẽ không giúp ích gì; AJAX không đồng bộ. Biến sẽ không được khởi tạo cho đến một thời gian sau đó. – SLaks

+2

Câu hỏi không hỏi khi nào họ có thể truy cập dữ liệu, hoặc những gì nó sẽ giữ, nó hỏi làm thế nào họ có thể truy cập dữ liệu bên ngoài chức năng ẩn danh. – Xymostech

+0

Cảm ơn bạn! Nó thực sự là đơn giản :) – iliketocodeandstuff

1

Bạn cần khai báo biến trước khi gọi ajax.

Simple mẫu:

var postsjson; 

$.ajax({ 
    url: "../../getposts.php" 
}).done(function(posts) { 
    postsjson = $.parseJSON(posts); 
}); 

console.info(postsjson); // Use here for example 
3

Điều thú vị là rằng lời hứa trở về từ chức năng Ajax có thể được sử dụng trong nhiều cách khác nhau, đây là một số:

var XHR = $.ajax({ 
    url: "../../getposts.php" 
}); 


function somethingElse() { 
    XHR.done(function(posts) { 
     var postsjson = $.parseJSON(posts); 
    }); 
} 

-

function myAjax(url) { 
    return $.ajax({ 
     url: url 
    }); 
} 

function doSomething(url) { 
    var postsjson = myAjax(url).done(parsePosts); 
} 

function parsePosts() { 
    return $.parseJSON(posts); 
} 

doSomething("../../getposts.php"); 

vv ...

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