2012-10-24 24 views
5

Ho la seguente funzione:Come ottenere dati da ajax.done()?

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

Come si usa la variabile postsjson di fuori della funzione .done(), o Come dichiaro che globale?

Non riesco a passarlo a un'altra funzione, perché voglio utilizzare l'array in un secondo momento, e non quando l'ajax è completato.

+0

Benvenuti nel meraviglioso mondo di ** async **! Non puoi farlo. – SLaks

+1

Puoi semplicemente dichiarare una variabile globale al di fuori della tua funzione e impostare tale variabile uguale a 'posts' una volta che è pronto. Tuttavia, non c'è modo di sapere con certezza quando quella variabile globale avrà qualcosa in essa. – Blazemonger

+0

In JS, qualsiasi variabile globale è tecnicamente una proprietà dell'oggetto 'window'. Quindi dovresti essere in grado di impostare 'window.myVar = posts;' e voila - instant globale. – Blazemonger

risposta

5

Se hai appena definisce la variabile al di fuori della chiamata AJAX:

var postsjson; 

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

Quindi è possibile utilizzare al di fuori. Allo stesso modo, se esci dallo var, lo dichiarerà globalmente, ma non è raccomandato.

Come sottolineato da SLaks, non sarà possibile utilizzare immediatamente i dati ottenuti dalla chiamata AJAX, è necessario attendere che la funzione done venga eseguita prima che venga inizializzata su qualcosa di utile.

+1

Ciò non aiuterà; AJAX è asincrono. La variabile non verrà inizializzata fino a qualche momento dopo. – SLaks

+2

La domanda non è chiedere quando possono accedere ai dati, o quello che manterrà, chiede come possono accedere ai dati al di fuori della funzione anonima. – Xymostech

+0

Grazie! In realtà era così semplice :) – iliketocodeandstuff

1

È necessario dichiarare una variabile prima di chiamare ajax.

Simple Sample:

var postsjson; 

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

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

La cosa interessante è che la promessa restituito dalla funzione Ajax può essere utilizzata in molti modi diversi, ecco alcuni:

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

ecc ...

Problemi correlati