Пинг сайт с нокаутом. js - PullRequest
1 голос
/ 21 марта 2020

Я хочу пропинговать несколько сайтов, используя javascript, и нашел это перо и делает то, что хочу.

Однако я не понимаю, когда добавляю goo12121212gle.com в список сайтов как тест доходит, говоря, что домен имеет responded, но в журнале консоли я вижу ERR_NAME_NOT_RESOLVED ??

Я новичок в JS, но я не уверен, почему нижеприведенный скрипт говорит о том, что сайт есть, а не одновременно? Чего-то не хватает в скрипте?

function ping(ip, callback) {

    if (!this.inUse) {
        this.status = 'unchecked';
        this.inUse = true;
        this.callback = callback;
        this.ip = ip;
        var _that = this;
        this.img = new Image();
        this.img.onload = function () {
            _that.inUse = false;
            _that.callback('online');

        };
        this.img.onerror = function (e) {
            if (_that.inUse) {
                _that.inUse = false;
                _that.callback('offline', e);
            }

        };
        this.start = new Date().getTime();
        this.img.src = "http://" + ip;
        this.timer = setTimeout(function () {
            if (_that.inUse) {
                _that.inUse = false;
                _that.callback('timeout');
            }
        }, 1500);
    }
}
var PingModel = function (servers) {
    var self = this;
    var myServers = [];
    ko.utils.arrayForEach(servers, function (location) {
        myServers.push({
            name: location,
            status: ko.observable('unchecked')
        });
    });
    self.servers = ko.observableArray(myServers);
    ko.utils.arrayForEach(self.servers(), function (s) {
        s.status('checking');
        new ping(s.name, function (status, e) {
            s.status(e ? "error" : status);
        });
    });
};
var komodel = new PingModel(['goo12121212gle.com','msn.com','104.46.36.174','23.97.201.12']);
ko.applyBindings(komodel);

https://codepen.io/lyellick0506/pen/NGJgry

1 Ответ

0 голосов
/ 21 марта 2020

Как onerror-, так и onload-callback используют "отвечал" в качестве сообщения, поэтому нет никакого различия между ними:

this.img.onerror = function (e) {
    if (_that.inUse) {
       _that.inUse = false;
       _that.callback('responded', e); // <--- change this to a different message
    }
};

В качестве альтернативы вы можете просто проверить, имеет ли параметр e было установлено:

new ping(s.name, function (status, e) {
    s.status(e ? "error" : status);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...