2012-10-24 11 views
5

Mam następującą funkcję:Jak uzyskać dane z ajax.done()?

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

Jak mogę użyć zmiennej postsjson poza funkcją .done() lub jak mogę oświadczyć, że globalny?

Nie mogę przekazać go do innej funkcji, ponieważ chcę korzystać z tablicy później, a nie po zakończeniu ajax.

+0

Witaj w cudownym świecie ** asynchronicznego **! Nie możesz tego zrobić. – SLaks

+1

Możesz po prostu zadeklarować zmienną globalną poza twoją funkcją i ustawić tę zmienną równą "posts", gdy będzie gotowa. Jednak nie ma sposobu, aby wiedzieć na pewno, kiedy ta zmienna globalna będzie zawierała cokolwiek. – Blazemonger

+0

W JS każda zmienna globalna jest technicznie właściwością obiektu 'window'. Więc powinieneś być w stanie ustawić 'window.myVar = posts;' i voila - instant global. – Blazemonger

Odpowiedz

5

Jeśli tylko zdefiniować zmienną poza wywołania AJAX:

var postsjson; 

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

Następnie można go używać na zewnątrz. Podobnie, jeśli po prostu odejdziesz od var, zadeklaruje go globalnie, ale nie jest to zalecane.

Jak wskazano w SLaks, nie będzie można natychmiast korzystać z danych uzyskanych z połączenia AJAX, musisz poczekać, aż funkcja done zostanie uruchomiona, zanim zostanie zainicjalizowana do czegokolwiek użytecznego.

+1

To nie pomoże; AJAX jest asynchroniczny. Zmienna nie zostanie zainicjalizowana do pewnego czasu później. – SLaks

+2

Pytanie nie pyta, kiedy mogą uzyskać dostęp do danych lub co będzie trzymać, to pytanie, w jaki sposób mogą uzyskać dostęp do danych poza anonimową funkcją. – Xymostech

+0

Dziękujemy! To było tak proste :) – iliketocodeandstuff

1

Musisz zadeklarować zmienną przed wywołaniem ajax.

Proste Próbka:

var postsjson; 

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

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

Fajne jest to, że obietnica zwracane z funkcji Ajax może być używany na wiele różnych sposobów, oto niektóre:

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"); 

itd ...