Quiero usar jQuery ajax para recuperar datos de un servidor.
Quiero poner la definición de la función callback de éxito fuera del bloque .ajax()
como el siguiente. Entonces, ¿necesito declarar la variable dataFromServer
como la siguiente para poder utilizar los datos devueltos por el callback de éxito?
He visto que la mayoría de la gente define el callback de éxito dentro del bloque .ajax()
. Entonces, ¿es correcto el siguiente código si quiero definir el callback de éxito fuera?
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
}
Sólo tienes que usar:
function getData() {
$.ajax({
url : 'example.com',
type: 'GET',
success : handleData
})
}
La propiedad success
sólo requiere una referencia a una función, y pasa los datos como parámetro a esta función.
Puedes acceder a tu función handleData
de esta manera debido a la forma en que se declara handleData
. JavaScript analizará tu código en busca de declaraciones de funciones antes de ejecutarlo, por lo que podrás utilizar la función en código anterior a la declaración real. Esto se conoce como hoisting.
Sin embargo, esto no cuenta para las funciones declaradas así:
var myfunction = function(){}
Esas sólo están disponibles cuando el intérprete las pasa.
Ver esta pregunta para más información sobre las 2 formas de declarar funciones
Intenta reescribir tu manejador de éxito a:
success : handleData
La propiedad success del método ajax sólo requiere una referencia a una función.
En su función handleData puede tomar hasta 3 parámetros:
object data
string textStatus
jqXHR jqXHR