2014-05-15 6 views
10

ho questo javascript:

$ajax = $.ajax({ 
    type: 'GET', 
    url: 'DBConnect.php', 
    data: '', 
    dataType: 'json', 
    success: function(data) {}, 
    error:function (xhr, ajaxOptions, thrownError) { 
     dir(thrownError); 
     dir(xhr); 
     dir(ajaxOptions); 
    } 
}); 
console.dir($ajax); 
console.dir($ajax.responseJSON); 

console.dir ($ Ajax) mostra che ha una proprietà denominata responseJSON, ma quando provo ad accedere con $ ajax.responseJSON restituisce il valore undefined: enter image description here

+0

Esiste un motivo specifico per cui è necessario, rispetto a ciò che viene fornito al gestore 'success' (che è comunque responseJSON) –

+0

Questo sarà indefinito/vuoto finché la chiamata ajax (che è asincrona) non è completato. A quel punto puoi accedervi dal metodo di successo. –

+0

Come ottengo i dati di risposta dal callback di successo? – red888

risposta

12

Beh, certo che non è definito, perché nel momento in cui si esegue console alle ultime righe del codice, la risposta non è ancora arrivata dal server.

$.ajax restituisce la promessa, che è possibile utilizzare per allegare done() e fail() richiamate, dove è possibile utilizzare tutte le proprietà che vedete. E hai effettivamente usato la callback error e success, ed è qui che puoi eseguire codice e altre funzioni che si basano sui dati nella risposta.

0

la risposta, è il "dati", nel successo ... in modo da poter accedere a quella scrittura dei dati [0], i dati [1], all'interno del successo.

Ad esempio:

success: function(data) { 
alert(data[0]); 
}, 

Se si desidera che questa risposta, per il successo, è possibile impostare una variabile al di fuori, e provare questo:

success: function(data) { 
myVar = data; 
}, 

Speranza, questo aiuto.

+0

Sì, ma come faccio a uscire dal callback di successo? Voglio lavorare con i dati in un'altra posizione nel mio script. – red888

+0

Ciao, imposta una variabile esterna alla funzione Ajax e, in caso positivo, assegna il valore dei dati a questa variabile, in modo da poter utilizzare questi dati in un'altra posizione. – Ferchi

2

È possibile utilizzare questo trucco per ottenere la risposta fuori:

jQuery.when(
    jQuery.getJSON('DBConnect.php') 
).done(function(json) { 
    console.log(json); 
}); 

E 'tardi, ma si spera aiuterà gli altri.

-2

Per coloro che in realtà non importa se è sincrona, come me, si può fare questo:

$('#submit').click(function (event) { 
    event.preventDefault(); 

    var data = $.ajax({ 
     type: 'POST, 
     url: '/form', 
     async: false, 
     dataType: "json", 
     data: $(form).serialize(), 
     success: function (data) { 
      return data; 
     }, 
     error: function (xhr, type, exception) { 
      // Do your thing 
     } 
    }); 

    if(data.success == 200) 
    { 
     $('#container').html(data.responseJSON.the_key_you_want); 
    } 
}); 

Corre attraverso i movimenti, attende una risposta dalla chiamata Ajax e li elabora nel modo in seguito se lo stato == 200 e all'interno della funzione error se qualcosa ha provocato un errore.

Modificare le opzioni in base alla situazione. Felice codifica :)

+0

La soluzione sincrona è quasi sempre quella sbagliata. – HumbleWebDev

+0

Sì, è una pratica scorretta utilizzare qui soluzioni sincrone per la maggior parte dei casi d'uso. Ma +1 per essere l'unica persona a fornire una risposta completa a un esempio di lavoro.Penso che a volte ci sia un valore nel vedere come funzionano anche gli esempi sincroni. – thclark

Problemi correlati