JQuery peut-il fournir une solution de rechange pour les appels ayant échoué AJAX? Voici mon essai:
function update() {
var requestOK = false;
$.getJSON(url, function(){
alert('request successful');
requestOK = true;
});
if (!requestOK) {
alert('request failed');
}
}
Malheureusement, même si la fonction de rappel de la méthode $ .getJSON () est appelée, j'obtiens le message "request failed", avant que la fonction de rappel n'ait la possibilité de définir la variable requestOK. Je pense que c'est parce que le code fonctionne en parallèle. Existe-t-il un moyen de gérer de telles situations? J'ai pensé au chaînage ou à un moyen d'attendre la demande AJAX, y compris sa fonction de rappel. Mais comment? Quelqu'un sait-il comment faire cela?
Vous devrez soit utiliser le niveau inférieur $. Ajax call, soit la fonction ajaxError . Le voici avec la méthode $ .ajax:
function update() {
$.ajax({
type: 'GET',
dataType: 'json',
url: url,
timeout: 5000,
success: function(data, textStatus ){
alert('request successful');
},
fail: function(xhr, textStatus, errorThrown){
alert('request failed');
}
});
}
[~ # ~] modifier [~ # ~] J'ai ajouté un timeout
au $.ajax
appelez et réglez-le sur cinq secondes.
La réponse de Dougs est correcte, mais vous pouvez réellement utiliser $.getJSON
et intercepter les erreurs (ne pas avoir à utiliser $.ajax
). Il suffit de chaîner l'appel getJSON
avec un appel à la fonction fail
:
$.getJSON('/foo/bar.json')
.done(function() { alert('request successful'); })
.fail(function() { alert('request failed'); });
Démo en direct: http://jsfiddle.net/NLDYf/5/
Ce comportement fait partie de l'interface jQuery.Deferred.
Fondamentalement, il vous permet d'attacher des événements à une action asynchrone après l'appel de cette action, ce qui signifie que vous n'avez pas à passer fonction d'événement à l'action.
En savoir plus sur jQuery.Deferred ici: http://api.jquery.com/category/deferred-object/
Oui, il est intégré à jQuery. Voir la documentation sur documentation jquery .
ajaxError peut être ce que vous voulez.
Je préfère cette approche car vous pouvez renvoyer la promesse et utiliser .then (successFunction, failFunction); partout où vous en avez besoin.
var promise = $.ajax({
type: 'GET',
dataType: 'json',
url: url,
timeout: 5000
}).then(function( data, textStatus, jqXHR ) {
alert('request successful');
}, function( jqXHR, textStatus, errorThrown ) {
alert('request failed');
});
//also access the success and fail using variable
promise.then(successFunction, failFunction);
Je crois que ce que vous recherchez est une option d'erreur pour le jquery objet ajax
getJSON est un wrapper pour le $.ajax
objet, mais il ne vous donne pas accès à l'option d'erreur.
EDIT: dcneiner a donné un bon exemple du code que vous auriez besoin d'utiliser. (Même avant de pouvoir poster ma réponse)