Ich habe jemanden gefunden, der dies mit einer sehr geschickten Verwendung des nativen ImageObjekts erreicht.
Von ihrer Quelle aus ist dies die Hauptfunktion (sie hat Abhängigkeiten von anderen Teilen der Quelle, aber Sie bekommen die Idee).
function Pinger_ping(ip, callback) {
if(!this.inUse) {
this.inUse = true;
this.callback = callback
this.ip = ip;
var _that = this;
this.img = new Image();
this.img.onload = function() {_that.good();};
this.img.onerror = function() {_that.good();};
this.start = new Date().getTime();
this.img.src = "http://" + ip;
this.timer = setTimeout(function() { _that.bad();}, 1500);
}
}
Dies funktioniert auf allen Arten von Servern, die ich getestet habe (Webserver, FTP-Server und Spieleserver). Es funktioniert auch mit Ports. Wenn jemand auf einen Anwendungsfall stößt, der fehlschlägt, posten Sie bitte in den Kommentaren und ich werde meine Antwort aktualisieren.
Update : Vorheriger Link wurde entfernt. Wenn jemand das oben Gesagte findet oder implementiert, kommentieren Sie es bitte und ich werde es der Antwort hinzufügen.
Update 2 : @trante war nett genug, um eine jsFiddle bereitzustellen.
http://jsfiddle.net/GSSCD/203/
Update 3 : @Jonathon hat mit der Implementierung ein GitHub-Repo erstellt.
https://github.com/jdfreder/pingjs
Update 4 : Es sieht so aus, als ob diese Implementierung nicht mehr zuverlässig ist. Die Leute berichten auch, dass Chrome nicht mehr alles unterstützt und einen net::ERR_NAME_NOT_RESOLVEDFehler auslöst. Wenn jemand eine alternative Lösung überprüfen kann, werde ich dies als akzeptierte Antwort angeben.
"/?cachebreaker="+new Date().getTime();bei Bedarf ein an das Ende des img src angehängt wird.