6
votes

Utilisez JQuery pour vérifier si les liens fonctionnent toujours

J'ai fait une fonction rapide pour vérifier chaque lien de la page en utilisant Ajax pour voir si elles fonctionnent toujours. Cela semble fonctionner, mais il ajoute le succès et la classe d'erreur à tous. Comment puis-je obtenir la fonction de rappel d'erreur pour seulement lancer si la réponse AJAX est 404? XXX


0 commentaires

4 Réponses :


6
votes

Le Succès code> et Error Code> Les paramètres attendent des fonctions.

Vous auriez besoin d'envelopper le code dans une fonction anonyme: p>

//there's no need to complicate things, use one call to each()
$('li > a').each(function () {
    var $this;
    $this = $(this); //retain a reference to the current link
    $.ajax({
        url:$(this).attr('href'), //be sure to check the right attribute
        success: function () { //pass an anonymous callback function
            $this.addClass('success');
        },
        error: function (jqXHR, status, er) {
            //only set the error on 404
            if (jqXHR.status === 404) { 
                $this.addClass('error');
            }
            //you could perform additional checking with different classes
            //for other 400 and 500 level HTTP status codes.
        }
    });
});


5 commentaires

Merci, je vais toujours avoir une question étrange où ils répondront avec 200 mais jettent toujours une erreur, car ils sont rouges dans la console de Firefox. Pourriez-vous avoir une idée pourquoi cela pourrait être? Voici un lien: testwww.chicagobobooth.edu/links_test.html


Vous ne pouvez pas effectuer des demandes de domaine croisées à moins que vous utilisiez une demande JSONP. C'est un Même stratégie d'origine problème. De plus, vous devez utiliser console.log au lieu de alerte et examiner les messages de votre console JavaScript.


Ouais, j'utilise habituellement console.log je faisais juste des choses rapidement pour régler ce problème lol. Laissez-moi regarder JSONP maintenant.


JSONP ne va pas faire ce que je pense que vous voulez que cela fasse. Vous ne pouvez pas gratter des pages HTML avec elle. Il est destiné à interagir avec les données JSON sur un autre serveur.


Oh, j'ai compris autant, je gratte cette idée tous ensemble bien que lol. Merci pour l'aperçu!



0
votes

Vous devez envelopper votre succès et vos rappels d'erreur à l'intérieur d'une fonction () appel: xxx


0 commentaires

1
votes

Tout d'abord, vous avez besoin d'un gestionnaire de succès et d'échec, le code fonctionne maintenant pour chaque lien. Vous n'avez pas besoin de l'attribut SRC, mais le Prop.

Ceci devrait fonctionner: P>

$('li').each(function(){
   $(this).children('a').each(function(index,value){
    $.ajax({
        url:$(value).prop('href'),
        success:function(){$(value).addClass('success')},
        error:function(){$(value).addClass('error')}
    })
  })
});


4 commentaires

Cool, jamais entendu parler de "Prop" avant ... Nice! +1


@andrux, si vous ne savez pas quelles méthodes sont disponibles dans jQuery, vous devriez Examiner l'API .


@zzzzbov Merci pour le commentaire, mais une "critique" ne veut pas dire que je connais toutes les méthodes disponibles à JQuery, à moins que je n'ai vraiment eu ce genre de temps disponible - ce que je ne fais pas


@zzzzbov je reçois votre point, merci pour le commentaire, abandonnant de ce fil de commentaire



0
votes

Les autres réponses Ajoutez la classe pour toutes les erreurs, si vous le souhaitez vraiment pour un 404 code> alors cela devrait faire:

$(this).children('a').each(function(){
    var self;
    self = this; //retain a reference to this
    $.ajax({
        url:$(this).attr('src'),
        success: function () { //pass an anonymous callback function
            $(self).addClass('success');
        },
        statusCode: {
           404: function() {
              $this.addClass('error');
           }
        }
    });
});


0 commentaires