Definizione della funzione di callback di successo di jQuery ajax

Voglio usare jQuery ajax per recuperare dati da un server.

Voglio mettere la definizione della funzione di callback di successo fuori dal blocco .ajax() come il seguente. Quindi devo dichiarare la variabile dataFromServer come la seguente in modo da poter utilizzare i dati restituiti dal callback di successo?

Ho visto la maggior parte delle persone definire il callback di successo all'interno del blocco .ajax(). Quindi il seguente codice è corretto se voglio definire il callback di successo all'esterno?

var dataFromServer;  //declare the variable first

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData(dataFromServer)
    })
}

function handleData(data) {
    alert(data);
    //do some stuff
}
Soluzione

Basta usare:

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })
}

La proprietà successo richiede solo un riferimento a una funzione, e passa i dati come parametro a questa funzione.

Potete accedere alla vostra funzione handleData in questo modo a causa del modo in cui handleData è dichiarato. JavaScript analizzerà il tuo codice per le dichiarazioni di funzione prima di eseguirlo, così sarai in grado di usare la funzione nel codice che precede la dichiarazione effettiva. Questo è noto come hoisting.

Questo non vale per le funzioni dichiarate in questo modo, però:

var myfunction = function(){}

Quelle sono disponibili solo quando l'interprete le ha passate.

Vedi questa domanda per maggiori informazioni sui 2 modi di dichiarare le funzioni

Commentari (6)

Prova a riscrivere il tuo gestore di successo in:

success : handleData

La proprietà success del metodo ajax richiede solo un riferimento a una funzione.

Nella tua funzione handleData puoi prendere fino a 3 parametri:

object data
string textStatus
jqXHR jqXHR
Commentari (0)

Io scriverei :

var handleData = function (data) {
    alert(data);
    //do some stuff
}

function getData() {
    $.ajax({
        url : 'example.com',
        type: 'GET',
        success : handleData
    })
}
Commentari (1)