2011-05-18 22 views
8

Im tratando de utilizar este script jQuery y esto me está confundiendo:jQuery AJAX Método éxito

function CallService() 
     { 
       $.ajax({ 
        type  : varType, //GET or POST or PUT or DELETE verb 
        url   : varUrl, // Location of the service 
        data  : varData, //Data sent to server 
        contentType : varContentType, // content type sent to server 
        dataType : varDataType, //Expected data format from server 
        processdata : varProcessData, //True or False 
        success  : function(msg) {//On Successfull service call 
        ServiceSucceeded(msg);      
        }, 
        error: ServiceFailed// When Service call fails 
       }); 
     } 

El bit im confundido acerca es el objeto éxito. La documentación de jQuery dice:

success(data, textStatus, jqXHR)Function, Array 

A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter; a string describing the status; and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object. As of jQuery 1.5, the success setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event. 

Pero esta firma del método parece en nada a la:.

success  : function(msg) {//On Successfull service call 
         ServiceSucceeded(msg);      
         } 

objeto que parece que estamos pasando en

Preguntas:

1) ¿Qué ¿significa function(msg){ServiceSucceeded(msg)}?

2) ¿Qué es 'msg' en este contexto?

3) ¿Cómo demonios estoy destinado a saber cómo estructurar la función del método para el éxito?

Respuesta

15

Pregunta perfectamente razonable. :-) En JavaScript, no necesariamente tiene que llamar a una función con tantos argumentos como defina, y no tiene que definir tantos argumentos como se le pueda llamar. Lo cual puede ser confuso si está acostumbrado a entornos más restringidos. :-)

específicos de respuesta:

1) ¿Qué función (msg) {ServiceSucceeded (msg)} significa?

Se define una función (un anónimo) que acepta un argumento con nombre (msg) y llama ServiceSucceded que pasa en ese arg. jQuery llamará a la función con los tres argumentos definidos por la documentación jQuery para la función success, pero esta función particular success solo está utilizando la primera de ellas (data). Más sobre funciones nombradas vs. funciones anónimas here.

2) ¿Qué es 'msg' en este contexto?

El primer argumento para la función. Los documentos de jQuery llaman a este primer argumento data, pero puedes llamarlo como quieras.

3) ¿Cómo demonios estoy destinado a saber cómo estructurar la función de método para el éxito?

que hiciste lo correcto, es en la documentación de jQuery.

Esto de argumentos de la función puede ser confuso, por lo que vamos a hacer algunos ejemplos:

function foo(arg) { 
    alert(arg); 
} 

Eso está perfectamente claro, estoy definiendo una función llamada foo que toma un solo argumento con nombre, arg. Y por lo tanto:

foo("Hi there"); // alerts "Hi there" 

Pero también puede hacer esto:

foo(); // alerts "undefined" 

No, no me dan ningún argumento para foo, y así dentro de foo, arg no está definido.

también puedo hacer esto:

foo("Hi there", "again"); // alerts "Hi there" 

estoy llamando foo con dos argumentos, pero foo sólo hace uso de uno de ellos.

pude definir foo utilizar tantos argumentos a medida que pasan en:

function foo() { 
    var index; 

    for (index = 0; index < arguments.length; ++index) { 
     alert(arguments[index]); 
    } 
} 

arguments es una cosa automática todas las funciones tienen, que es un pseudo-array (que no es realmente un Array) del real argumentos con los que se invocó la función. Y así:

foo("Hi there", "again"); // alerts "Hi there", and then alerts "again" 

Incluso puede mezclar con nombre y argumentos sin nombre:

function foo(arg) { 
    var index; 

    alert(arg); 
    for (index = 1; index < arguments.length; ++index) { 
     alert("[" + arguments[index] + "]"); 
    } 
} 

Así que ahora

foo("Hi there", "again"); // alerts "Hi there" and then alerts "[again]" 

Nota del [] alrededor de la segunda alerta, porque empecé bucle con el índice 1 en lugar de cero

arguments y con nombre args están conectados:

Si hago foo("Hi");, que muestra estas alertas: (. Se va por el otro, también, si se actualiza arguments[0])

arg = Hi 
arguments[0] = Hi 
arg = Updated 
arguments[0] = Updated

+2

Hola TJ, tu respuesta fue de mucha ayuda, gracias, gracias. Puedo ver lo que está sucediendo ahora simplemente simplificará un poco. – Exitos

+0

Acabo de leer su actualización, esto es realmente útil, explica mucho ahora. Nunca me di cuenta de que javascript podría estar 'sobrecargado'? de tal manera ... – Exitos

+0

@ Pete2k: ¡No se preocupe, me alegro de que haya ayudado! Sí, las funciones de JavaScript son muy libres, lo que las hace bastante poderosas, con todos los pros y contras que eso implica. ;-) –

2
  1. Significa que el controlador de éxito invoca ServiceSucceeded con la respuesta de la solicitud.
  2. msg contiene la respuesta de la solicitud. msg mapas a data en la documentación jQuery.
  3. Debe buscar en la documentación jQuery para encontrar la firma.
6

La función se pasa 3 parámetros: data, status, y el objeto jqXHR. data es lo que se devuelve de la llamada AJAX, status es el código de estado HTTP (creo), y jqXHR es un objeto XHR envuelto jQuery.

En este script, solo se preocupan por el parámetro de datos, y no por los otros dos.

Con success: function(msg), solo obtienen el parámetro data. Los otros dos son enviados, pero ignorados.

ServiceSucceeded es simplemente una función que se invoca con el parámetro data que se le envió.

success: ServiceSucceeded podría haber funcionado también aquí.

+1

'textStatus' (' status', como lo mencionó anteriormente) no es el código de estado. Es === a '" éxito "' si tiene éxito, y presumiblemente '" error "' de lo contrario. No me preguntes cuál es el punto, si solo puedes especificar las funciones de éxito/error. – Sinjai

1

1) Se llama a esa función si la solicitud AJAX es exitosa, es decir, el servidor que está siendo contactado devuelve un código de estado exitoso.

2) Supongo que 'msg' son los datos devueltos por el servidor. Los otros dos argumentos no se suministran y, por lo tanto, no se utilizan.

3) Use la documentación de Jquery y juegue hasta que obtenga lo que desea.

1
  1. Ésta es una función anónima .
    Es como una función normal, pero sin nombre.

  2. msg es el primer parámetro de la función.

  3. Lea la documentación.

1

Aunque la función de éxito se define como tomar tres parámetros (según la documentación que citó), esos tres parámetros ar No es obligatorio: Javascript es muy indulgente con este tipo de cosas; si pierde un parámetro de una llamada a función, simplemente se establece en underfined, por lo que siempre que no intente usarlo, JS no arrojará ningún error.

El código que ha proporcionado solo da un parámetro - msg - pero en JS, esto es perfectamente válido; simplemente significa que msg será el parámetro data definido en los documentos, y textStatus y jqXHR no estarán definidos.

Esto está bien, siempre y cuando en su función de éxito en realidad no desee utilizar ninguno de esos parámetros. Si desea usarlos, páselos, pero si no, está bien soltarlos. Estás escribiendo la función de éxito, por lo que puedes decidir cuál de los tres parámetros usar.

1

jquery Ajax es una forma de comunicarse con el servidor (PHP, ASP, lo que sea). Supongamos que usas PHP. la función "callService()" envía una solicitud a "varUrl" (validation.php, i.e) y obtiene (o POST -> varType) el contenido (varContentType -> valdation.php? id = 1231 & whatever = soemthing). El propósito de esto es obtener algunos datos del lado del servidor sin volver a cargar la página. Si desea la validación.php a echo algunos html, entonces el tipo de datos en la función Ajax debe ser "html". Consulte jquery.com para obtener más información sobre dataType.

El parámetro de éxito es un controlador de función para la respuesta del servidor. Se llama al éxito si obtiene una respuesta del servidor correspondiente al tipo de datos que solicitó (html, json, text, whatever). En ese caso particular, si el servidor responde correctamente, se llama a la función "ServiceSucceeded" con el atributo "msg", que es la respuesta del servidor que solicitó.

Cuestiones relacionadas