Fehlerhafte URLs mit JS/jQuery herausfinden

B

Benutzer007

Hallo,

ich will mit einem Script die fehlerhaften URLs einer Webseite herausfinden.
http://fiddle.jshell.net/bttkvfo6/
Javascript:
(function() {

  var errUrls = [];
  var allUrls = [];
  //var allUrls = $('a[href]');
  allUrls.push('https://www.tutorials.de'); // erscheint als Fehler
  allUrls.push('h_ttps://www.tutorials.de'); // sollte Fehler bringen
  allUrls.push('Schwachsinn'); // erscheint als Success!
  okUrls = [];
  //alert('Gesamt-Anzahl: ' + allUrls.length);
  //$('body').append('<div>Gesamt-Anzahl: ' + allUrls.length + '</div>');
   
  $(allUrls).each(function(i,href) {                     
    $.ajax({
      type: 'HEAD',
      url: href,
      success: function() {
        okUrls.push(href)
      },
      error: function() {
        errUrls.push(href);
      }
      //,
      //complete: function() { 
      //  if (allUrls.length == i) {
      //    Alerts erscheinen wild durcheinander
      //    alert('i: ' + i + 'Gesamt-Anzahl: ' + allUrls.length + ", fehlerfrei: " + okUrls);
      //    alert(errUrls.join('\n'));
      //  }
      //}
    });
  });

  // In Ermangelung einer Callback-Funktion 
  setTimeout(function() {
      $('body').append('<div>Gesamtanzahl: ' + allUrls.length + '<br>Anzahl ok: ' + okUrls.length + "<br>Anzahl Errors: " + errUrls.length + '<br>ERRORS:<br>'+ errUrls.join('<br>')+'<br>OK:<br>'+okUrls.join('<br>')+'</div>');
  },3000);
   
   
  
})();
Aber irgendwie ist der Wurm drin.
Wie weiß man eigentlich, wann die Schleife beendet ist, um anschließend den nächsten Befehl auszuführen?

Wer kann helfen?

Grüße
 
Zuletzt bearbeitet von einem Moderator:
Hi

"http://Schwachsinn" statt "Schwachsinn" allein wird auch als Fehler gemeldet.
"Schwachsinn" wird als relative Uri (auf Jsfiddle) genommen, und was dann ist hängt vom Server ab.

Die anderen zwei Anfragen werden aus Sicherheitsgründen nie funktionieren,
weil der Server, wo die Seite mit dem Script herkommt, und der angefragte Server verschieden sind.
Nur Anfragen Richtung JSFiddle funktionieren auf die Art (außer der andere Servererlaubt Anfragen
von Seite xy explizit); nennt sich Same Origin Policy.
 
D. h. es gibt keine Möglichkeit zu checken, ob eine URL die formal korrekt ist, auf ihre Existenz zu checken? Kann ich kaum glauben.
JS im Browser ist eben absichtlich sehr eingeschränkt.
Wenn man einen Server mit PHP oÄ, für die eigene Seite hat, statt nur JSFiddle zu nehmen,
kann man so eine Anfrage an eine PHP-Datei vom eigenen Server schicken, die wiederum die Zielurl prüft.
 
Ich hatte gedacht bzw. wohl eher gehofft oder bin davon ausgegangen, dass jQuery/Ajax das kann, schließlich sollen ja keine Daten übertragen werden sondern nur gecheckt werden, ob die Adresse überhaupt existiert.
Gibt es denn einen kostenlosen Service, der so eine Funktion anbietet?
 
Nein, ich meine einen Dienstleister, der Funktion "gibtEsDieseURL(URL)" anbietet, das muss doch machbar sein.
 
Nein.
Ohne serverseitige Hilfe gehts wie gesagt nicht, weil du keine anderen
Server außer der Herkunft vom Script selber kontaktieren kannst,
und mit Hilfe von einem fremden Servern gehts aus dem selben Grund auch nicht.

Irgendwas muss auf dem Server laufen, wo auch das Script herkommt.
Und das ist dann kein externer Diensteanbieter, sondern du selber,

Ja, es ist lästig.
Aber die Probleme, die man ohne diese Sperre hat, sind noch viel schlimmer.
 

Neue Beiträge

Zurück