2009-07-09 10 views
8

Quello che vorrei fare è inviare i dati di ritorno da qualsiasi chiamata ajax e averli disponibili nella funzione ajaxComplete.Ottieni i dati di risposta nella funzione jQuery ajaxComplete

Così, quando ho una richiesta $.post o $.get o $.getJSON e così via in questo modo:

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

voglio anche per ottenere gli stessi dati in

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

Ciò significa che voglio nella funzione globale ajaxComplete anche gli stessi dati che ottengo quando chiamo una delle funzioni ajax.

Grazie per le risposte.

risposta

7

XMLHttpRequest.responseText

Si noti che se si imposta il tipo di dati nella chiamata a JSON o si utilizza la funzione getJSON si dovrà copiare quello che jQuery fa internamente e utilizzare eval ('(' + dati + ')') per ottenere i dati in json in modo che rispecchi i dati param passati al callback di successo.

O come indica activa basta chiamare il metodo interno per salvare il lavoro.

+3

jQuery offre ora un metodo di parseJSON – SpoonMeiser

+0

@SpoonMeiser che non ha ancora il 9 luglio, quando ho postato questo! – redsquare

+0

No, non intendevo suggerirlo. Era nuovo in 1.4.1, e 1.3.2 sembra essere stato attuale quando è stata posta questa domanda. Ho solo pensato che valesse la pena di fare un appunto. – SpoonMeiser

1

Non c'è un modo semplice per farlo, ma è possibile estrarre i dati dall'oggetto xhr. jQuery include una funzione interna che fa proprio questo, ma non è documentata.

è possibile chiamare questo metodo come questo:

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

    alert(data); 
}); 

Ma attenzione: questo è valido in jQuery 1.3.2, e perché è documentato, è possibile cambiare nelle future versioni di jQuery.

+1

++ per chiamare il httpData interno – redsquare

+2

A partire da 1.5 questo metodo è stato rimosso. – cletus

+0

@cletus A partire da jQuery 1.8, il metodo .ajaxComplete() deve essere collegato solo al documento (http://api.jquery.com/ajaxcomplete/) – prograhammer

4

è possibile convertire in JSON all'interno vostra funzione ajaxComplete utilizzando

$.parseJSON(xhr.responseText);