J'ai vérifié que mes demandes AJAX sont réussies en faisant quelque chose comme ceci:
$.post("page.php", {data: stuff}, function(data, status) {
if(status == "success") {
//Code here
}
else {
//Error handling stuff
}
});
La vérification de la variable d'état est-elle la meilleure façon de procéder, ou existe-t-il une meilleure façon de s'assurer que la demande a bien abouti? Je considère qu'une demande "réussie" est une demande qui atteint la page sur laquelle je poste avec succès sans temporisation (si le serveur était en panne et qu'une demande AJAX a été faite juste avant) est descendu à titre d'exemple) ou renvoyant toute sorte d'erreur 404 ou 500.
En appelant $.post
De cette façon, vous passez automatiquement uniquement dans une fonction success handler
.
Si quelque chose s'est mal passé dans la demande, cette méthode n'est même pas exécutée.
Pour avoir plus de contrôle, utilisez directement $.ajax()
ou passez les gestionnaires d'échec. Cela pourrait ressembler
$.post("page.php", {data: stuff}, function(data, status) {
// we're fine here
}).fail(function(err, status) {
// something went wrong, check err and status
});
La même chose en utilisant .ajax()
:
$.ajax({
type: 'POST',
url: 'page.php',
data: stuff,
success: function( data ) {
},
error: function(xhr, status, error) {
// check status && error
},
dataType: 'text'
});
Vous pouvez même passer plus de gestionnaire d'événements ajax à $.ajax
, Comme beforeSend
pour modifier/lire les en-têtes XHR ou complete
pour avoir un gestionnaire qui se déclenche dans les deux sens (erreur ou non) lorsque les demandes sont terminées.
Je préfère utiliser l'appel ajax, car il a un gestionnaire de succès explicite
$.ajax({
url: "page.php",
data: stuff,
success: function(response){
console.log("success");
}
});
Je recommanderais également d'utiliser firebug ou webkit similaire, alors vous pouvez suivre les demandes et vérifier les paramètres!
jQuery considère "réussi" dans la façon dont il est dans le code source, bien sûr. Cela n'inclut pas un code d'état de 404/500 et ni un délai d'attente, car aucun code d'état n'a été retourné dans ce cas.
Vous pouvez vérifier quand il renvoie exactement "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";
...
}
}