Comment annuler un jquery.load()?
Je voudrais annuler une .load (), lorsque le load() ne retourne pas dans les 5 secondes. Si c'est si je montre un message d'erreur comme "désolé, pas de photo chargé".
Ce que j'ai est...
...la gestion des timeouts:
jQuery.fn.idle = function(time, postFunction){
var i = $(this);
i.queue(function(){
setTimeout(function(){
i.dequeue();
postFunction();
}, time);
});
return $(this);
};
... de l'initialisation de l'erreur de délai d'attente de messages:
var hasImage = false;
$('#errorMessage')
.idle(5000, function() {
if(!hasImage) {
//1. cancel .load()
//2. show error message
}
});
... le chargement de l'image:
$('#myImage')
.attr('src', '/url/anypath/image.png')
.load(function(){
hasImage = true;
//do something...
});
La seule chose que je n'arrivais pas à comprendre est comment faire pour annuler la course load() (si c'est possible).
Edit:
D'une autre manière: Comment puis-je empêcher l' .méthode load() pour appeler la fonction de rappel quand il est de retour?
Vous devez vous connecter pour publier un commentaire.
Si vous voulez un traitement personnalisé comme cela, vous ne pouvez pas utiliser le jQuery.fonction load (). Vous aurez à passer à jQuery.ajax(), que je recommande tout de même car vous pouvez faire beaucoup plus avec elle, surtout si vous avez besoin toute sorte d'erreur de manipulation, il sera nécessaire.
Utiliser le beforeSend option pour jQuery.ajax et de capturer le xhr. Ensuite, vous pouvez créer de rappel qui peut annuler la xhr après votre délai d'attente, et les rappels nécessaires.
Ce code n'est pas testé, mais devrait vous obtenir a commencé.
Votre reformulé question secondaire:
Comment puis-je annuler l'attente des fonctions de rappel, créé à l'aide de l' .la méthode load ()?
Vous pouvez annuler toutes les jquery rappels, à l'aide de cette 'nucléaire' option:
Je pense que le plus simple serait d'utiliser
$.ajax
directement. De cette façon, vous pouvez commencer à un délai d'attente, et de le délai d'attente définir un indicateur que le gestionnaire sur l'appel ajax pouvez vérifier. Le délai peut également afficher un message ou quoi que ce soit..load()
API est synchrone, et c'est tout..load()
être synchrone - je ne pense pas que c'est réellement. Désolé à ce sujet. Cependant, je ne sais pas de toute façon de dire jQuery pour annuler la fonction de rappel; l'objet xhr reste enfouie.Si vous chargez ce code après JQuery a été chargé, vous serez en mesure de les appeler .load() avec un paramètre de délai d'attente.
Vous ne savez pas si vous êtes intéressé par un écrasement de toutes les "standard" des fonctions JQuery, mais cela vous permettra de les utiliser .load() de la façon dont vous avez décrit.
Je ne pense pas que vous pouvez y accéder à partir d'ici - comme @Pointu mentionné, il vous suffit d'arriver à l'objet XmlHttpRequest de sorte que vous pouvez accéder à la
.abort()
méthode. Pour cela, vous avez besoin de la.ajax()
jQuery API qui renvoie l'objet pour vous.De limitation de la capacité d'interrompre la demande, une autre méthode à prendre en compte est d'ajouter de la connaissance de l'attente dans la fonction de rappel. Vous pourriez le faire de deux façons: d'abord
Et votre rappel:
Ou vous pouvez contourner le régime de ralenti pour cette fonctionnalité particulière:
Aucune de ces approches n'est idéal, mais je ne pense pas que vous pouvez directement annuler charge de jQuery 1.4 - peut-être une belle demande de fonctionnalité pour le jQuery équipe, bien que.
.attr('src', '/url/anypath/image.png')
envoie immédiatement la requête HTTP pour obtenir l'image, avant de la charge de l'événement est enregistré. Vous devez déplacer lesattr()
à la fin, après leload()
.$('#myImage').load(function(){...})
n'est pas un appel de fonction pour charger l'image, c'est en réalité la sténographie pour la lier à un rappel à laonload
event.Par conséquent, l'ajout d'un
timeout
paramètre à la.load()
méthode comme suggéré dans d'autres réponses n'aura aucun effet.Il pense que vos deux options sont les suivantes:
Continuer sur le chemin que vous
la suite et de faire quelque chose comme
$('#myImage').attr('src', '');
àannuler le chargement de l'image après il fois
hors, ou
Trouver un moyen d'utiliser
$.ajax( { ... , timeout: 5000, ...} );
à chargel'image au lieu de laisser le
navigateur le faire automatiquement via le
<img src="...">
attribut.Vous pouvez simplement définir un délai d'attente avant le chargement de l'image ainsi que des essais pour une erreur de chargement.