2011-11-15 6 views
14

Ho controllato per assicurarsi che le mie richieste AJAX hanno successo facendo qualcosa di simile a questo:modo migliore per controllare se la richiesta AJAX è riuscito a jQuery

$.post("page.php", {data: stuff}, function(data, status) { 
    if(status == "success") { 
     //Code here 
    } 
    else { 
     //Error handling stuff 
    } 
}); 

sta controllando la variabile di stato il modo migliore per andare su come fare questo, o c'è un modo migliore per assicurarsi che la richiesta sia effettivamente passata? Sto prendendo in considerazione una richiesta "riuscita" per essere una richiesta che colpisce la pagina che sto postando con successo senza il timeout (se il server era inattivo e una richiesta AJAX è stata fatta proprio prima che scendesse come esempio) o restituendo qualsiasi tipo di errore 404 o 500.

+4

Cosa consideri efficace? Che la connessione è stata fatta e che i dati sono stati restituiti, o che lo script sul tuo server ha effettivamente fatto ciò che volevi che facesse? A seconda dell'uso, potrebbe essere necessario controllare anche la risposta effettiva. – Brad

+0

Modificato la mia domanda per spiegare quello che considero riuscito – Aaron

risposta

27

Chiamando $.post in questo modo, si passa automaticamente solo a una funzione success handler.

Se qualcosa nella richiesta è andato storto, questo metodo non viene nemmeno eseguito.

Per avere un controllo maggiore utilizzare direttamente $.ajax() oppure passare in gestori errori. Questo potrebbe sembrare

$.post("page.php", {data: stuff}, function(data, status) { 
    // we're fine here 
}).fail(function(err, status) { 
    // something went wrong, check err and status 
}); 

la stessa cosa usando .ajax():

$.ajax({ 
    type: 'POST', 
    url: 'page.php', 
    data: stuff, 
    success: function(data) { 
    }, 
    error: function(xhr, status, error) { 
     // check status && error 
    }, 
    dataType: 'text' 
}); 

si può anche passare gestore di eventi più ajax per $.ajax, come beforeSend di modificare/leggere le intestazioni XHR o complete di avere un gestore che spara in entrambi i casi (errore o meno) quando le richieste sono finite.

+0

Funziona alla grande per la gestione degli errori dei parametri mancanti per me (metodo .post) ... grazie jAndy. –

1

jQuery considera "riuscito" nel modo in cui è nel codice sorgente, ovviamente. Questo non include un codice di stato 404/500 e nemmeno un timeout, poiché in questo caso non è stato restituito alcun codice di stato.

È possibile controllare esattamente quando ritorna "success":

// If successful, handle type chaining 
if (status >= 200 && status < 300 || status === 304) { 

... 
    // If not modified 
    if (status === 304) { 

     statusText = "notmodified"; 
... 

    // If we have data 
    } else { 

     try { 
... 
      statusText = "success"; // So: only when status code is in 
            // the range 200 <= x < 300 
... 
     } catch(e) { 
... 
      statusText = "parsererror"; 
... 
     } 
    } 
2

preferisco usare la chiamata ajax, in quanto ha un gestore esplicito successo

$.ajax({ 
url: "page.php", 
data: stuff, 
success: function(response){ 
console.log("success"); 
} 
}); 

Consiglio anche usando Firebug o webkit simile, quindi è possibile tenere traccia delle richieste e controllare i parametri!

Problemi correlati