2011-08-21 54 views
5

Tengo dos llamadas jQuery Ajax que estoy combinando en una página. Estoy atrapado en el success: function() en cada uno, como uno es success: function(msg) y el otro es success: function(data). No estoy seguro de lo que ambos significan, y de lo que deberían ser en el código combinado. Colocaré las dos llamadas a continuación, por separado, y las combinaré como las tengo hasta ahora.¿Qué significa `success: function (msg)` en mi llamada jQuery Ajax?

Ajax Solicitud n. ° 1: hay un $msg .= "<div class='pagination'><ul>"; en esta página de funciones php. No estoy seguro si eso es a lo que se refiere.

$.ajax 
({ 
    type: "GET", 
    url: "new_arrivals_data.php", 
    data: "page="+page, 
    success: function(msg) 
    { 
     $("#gallery_container").ajaxComplete(function(event, request, settings) 
     { 
      gallery_show(); 
      loading_hide(); 
      $("#gallery_container").html(msg); 
     }); 
    } 
}); 

Ajax Petición # 2: Por lo que yo puedo ver, no hay data en cualquier lugar de archivo PHP de esta llamada. No sé a qué se refiere function(data).

$.get("new_arrivals_data.php",{imgs: value}, function(data){ 
    $("#gallery_container").html(data); 
}); 

solicitud combinada: he puesto un ? donde msg fue en la llamada original como estoy seguro de qué poner en su lugar.

$.ajax 
({ 
    type: "GET", 
    url: "new_arrivals_data.php", 
    data: {page:page, imgs: value}, 
    success: function(?) 
    { 
     $("#gallery_container").ajaxComplete(function(event, request, settings) 
     { 
      gallery_show(); 
      loading_hide(); 
      $("#gallery_container").html(?); 
     }); 
    } 
}); 

Respuesta

3

msg y data son simplemente los nombres de los parámetros formales. Los usa para hacer referencia a los datos de respuesta que se pasan a esa función cuando se invoca.

Puede cambiarle el nombre a cualquier identificador JavaScript válido.

Aunque no hay realmente ninguna razón para llamar ajaxComplete dentro del success: devolución de llamada:

success: function(whatever_you_want_to_call_it) { 
     gallery_show(); 
     loading_hide(); 
     $("#gallery_container").html(whatever_you_want_to_call_it); 
} 

$.get("new_arrivals_data.php",{imgs: value}, function(i_like_ice_cream){ 
    $("#gallery_container").html(i_like_ice_cream); 
}); 

Recuerde, en ambos casos, que está pasando una función como un argumento Esa función se invoca cuando se recibe la respuesta.

Cualquier código que invoque esa función, también está pasando la respuesta a esa función como primer argumento para que tenga acceso a ella. Es por eso que definiste el parámetro.

Es muy similar a declarar una variable en una función.

$.get("new_arrivals_data.php",{imgs: value}, function(){ 

    var i_like_ice_cream = arguments[0]; 
    $("#gallery_container").html(i_like_ice_cream); 

}); 

Esto hace casi lo mismo. Has asociado una variable con el primer argumento pasado a tu función de devolución de llamada.

+0

¿Entonces estás diciendo que literalmente puede ser cualquier cosa? No tiene que tener nada que ver con el archivo php? – stefmikhail

+0

@stefmikhail: Cualquier nombre válido de variable de JavaScript. No tiene nada que ver con el PHP. Es como declarar una variable en tu función. 'function() {var msg = argumentos [0]; /*...*/} 'sería efectivamente lo mismo. – user113716

1

Es simplemente un nombre para la variable que contiene los datos de respuesta devueltos por la llamada ajax. Nómbrelo lo que tenga más sentido para el contexto, para que su código sea más legible, p. html, resp, logged.

2

Puede ser cualquier nombre de variable válido. O data o msg funcionarán, siempre que use el mismo dentro del alcance de esa función.

Para explicar, está configurando success en una función anónima, casi como una función sin nombre. Por lo tanto, cuando jQuery distribuye el evento success, llama a la función que le ha asignado al crear la solicitud ajax. También transfiere algunos argumentos a esa función (en este caso, los datos resultantes de la solicitud de ajax). Lo que está definiendo es a qué se debe llamar esa información entrante en el alcance de esta nueva función.

Tome el siguiente código de ejemplo:

function workOnBob(aWorker) { 
    aWorker("Bob") 
} 

var sayHi = function(name) { alert("Hello " + name); }; 
var getMarried = function(groom) { alert(groom + " is getting married!"); }; 

workOnBob(sayHi); // "Hello Bob" 
workOnBob(getMarried); // "Bob is getting married!" 

Se puede ver que workOnBob es una función, y se debe pasar una función anónima. Invoca esa función con la cadena "Bob". Además, observe que las funciones anónimas, sayHi y getMarried, han nombrado los argumentos que reciben de forma diferente dentro de su propio ámbito (name y groom, respectivamente). Ambos obtienen la cuerda "Bob", pero ambos eligen llamarlo algo diferente.

Las funciones anónimas y los cierres pueden ser confusos, pero una vez que los domina, son muy divertidos.

+0

¡Fantástica respuesta! Ahora entiendo mucho mejor. Tratar de aprender todo esto es difícil sin conocer a nadie a quien pueda preguntar. Curioso, la llamada desde arriba está dentro de 'function loadData (page) {}'. ¿Esa "página" significa algo diferente de la explicación anterior? Más adelante en el código se llama de la siguiente manera: 'loadData (1)'. ¿Qué significa esto? – stefmikhail

+0

Por cierto, ¡adore su nombre de usuario! – stefmikhail

Cuestiones relacionadas