J'utilise la fonction jQuery getJSON()
. Cette fonction permet d’obtenir des données sans problème. Mais parfois, attendre, attendre, attendre ... Et ma barre de chargement indique chargement chargement chargement au centre de la page. Donc, la fonction jQuery ajax()
a une variable de délai d’expiration. Mais je veux utiliser la fonction getJSON
. Et je pense que je peux utiliser les fonctions ajaxStart()
et ajaxStop()
. Mais comment?
$('.loadingDiv')
.hide()
.ajaxStart(function() {
$(this).fadeIn();
setTimeout("throw '';",15000) //i used this but didn't work
setTimeout("return;",15000) //i used this but didn't work
setTimeout("abort();",15000) //i used this but didn't work.(Abort all ajax events)
})
.ajaxStop(function() {
$(this).fadeOut();
});
getJSON()
renvoie une promesse sur laquelle vous pouvez appeler la fonction abort
:
var p = $.getJSON(..., function(){ alert('success');});
setTimeout(function(){ p.abort(); }, 2000);
EDIT: mais si votre objectif est simplement d'avorter si cela prend trop de temps, la réponse de Lethal-Guitar est meilleure.
getJSON()
est juste un raccourci pour ce qui suit:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success
});
Vous pouvez donc utiliser $.ajax()
et spécifier l’option timeout
comme vous le souhaitez. Voir aussi: http://api.jquery.com/jQuery.getJSON/
Comme le dit Lethal-Guitar, la fonction getJSON()
n'est qu'un raccourci pour $.ajax()
. Si vous souhaitez détecter si un dépassement de délai s'est produit plutôt qu'une erreur réelle, utilisez le code ci-dessous.
var request = $.ajax({
dataType: "json",
url: url,
data: data,
success: function( ) { },
timeout: 2000
}).fail( function( xhr, status ) {
if( status == "timeout" ) {
// do stuff in case of timeout
}
});
Il y a toujours la voie nucléaire aussi:
//Set AJAX timeout to 10 seconds
$.ajaxSetup({
timeout: 10*1000
});
Cela définira toutes les requêtes AJAX de votre programme (même via $ .getJSON) afin d’avoir un délai de 10 secondes (ou ce que vous avez).
la fonction setTimeout exécute un ensemble de code après un nombre spécifié de millisecondes dans la portée globale.
La fonction getJSON (selon la documentation jQuery ici http://api.jquery.com/jQuery.getJSON/ ) est un raccourci pour:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success
});
alors vous voudriez faire votre appel comme suit:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success,
timeout: 15000
});
$('.loadingDiv')
.hide()
.ajaxStart(function() {
$(this).fadeIn();
})
.ajaxStop(function() {
$(this).fadeOut();
});
Je pense qu'aucune de ces réponses n'est idéale. Je sais que cela a pris du retard, mais vous souhaitez utiliser les options de rappel de réussite/d'erreur de la méthode .ajax();
lors de la réception d'une réponse JSONP.
Exemple de comment je structurerais ceci:
// Call
$.ajax({
// URL you want to get
url: 'http://example.com/json?callback=?',
// Set a realistic time in milliseconds
timeout: 3000,
// Put in success callback function here, this example
// shows you the data you got back from the call
success: function(data) {
console.log(data);
},
// Put in an error handling function, just an alert in this case
error: function(badData) {
alert('The call was unsuccessful');
},
type: 'POST'
});