2009-07-09 13 views
8

Lo que me gustaría hacer es enviar los datos de retorno de cualquier llamada ajax y también tenerlos disponibles en la función ajaxComplete.Obtenga los datos de respuesta en la función jQuery ajaxComplete

Así que cuando tengo una petición $.post o $.get o $.getJSON y así sucesivamente como esto:

$.post(url, options, function(DATA) 
{ 
    $('output').html(DATA); 
}); 

también quiero obtener los mismos datos en

$.ajaxComplete(function(event, XMLHttpRequest, ajaxOptions) 
{ 
    // do something with DATA that is returned by the ajax request 
    alert(DATA); 
}); 

Esto significa que quiero en el La función global ajaxComplete también tiene los mismos datos que obtengo cuando invoco una de las funciones de Ajax.

Gracias por las respuestas.

Respuesta

7

XMLHttpRequest.responseText

Tenga en cuenta que si se establece el tipo de datos en la llamada a JSON o está utilizando la función getJSON tendrá que copiar lo jQuery hace internamente y utilizar eval ('(' + data + ')') para obtener los datos en json para que refleje el parámetro de datos pasado a la devolución de llamada exitosa.

O como activa señala simplemente llame al método interno para guardar el trabajo.

+3

jQuery proporciona ahora un método parseJSON – SpoonMeiser

+0

@SpoonMeiser didnt el 9 de julio cuando me envió esto! – redsquare

+0

No, no quise sugerir que sí. Era nuevo en 1.4.1, y 1.3.2 parece haber estado actualizado cuando se planteó esta pregunta. Solo pensé que valía la pena hacer una nota. – SpoonMeiser

1

No hay una manera fácil de hacerlo, pero podría extraer los datos del objeto xhr. jQuery incluye una función interna que hace precisamente eso, pero no está documentado.

Puede llamar a este método como este:

$.ajaxComplete(function(event, xhr, options) 
{ 
    var data = $.httpData(xhr,options.dataType); 

    alert(data); 
}); 

Pero cuidado: esto es válido en jQuery 1.3.2, y porque es indocumentado, se puede cambiar en futuras versiones de jQuery.

+1

++ para llamar al httpData interno – redsquare

+2

A partir de 1.5 este método se ha eliminado. – cletus

+0

@cletus A partir de jQuery 1.8, el método .ajaxComplete() solo debe adjuntarse al documento (http://api.jquery.com/ajaxcomplete/) – prograhammer

4

usted puede convertir a JSON dentro de su función ajaxComplete utilizando

$.parseJSON(xhr.responseText); 
Cuestiones relacionadas