javascript - 使用 knockout.js Ping 网站

标签 javascript knockout.js

我想使用 javascript ping 几个站点,并找到了这支笔并执行了我想要的操作。

但是,我不明白当我将 goo12121212gle.com 添加到站点列表作为测试时,它会显示域已响应,但在控制台日志我看到 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

最佳答案

onerror- 和 onload-callback 都使用“responded”作为消息,因此无法区分它们:

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);
});

关于javascript - 使用 knockout.js Ping 网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60792831/

相关文章:

javascript - daterangepicker中点击 "selected date"时的回调函数

knockout.js - 两个带 knockout 的日期选择器,一个更新另一个

javascript - 在 Knockout js 中执行同时乘法

javascript - jQuery 动画 scrollTop 问题

javascript - 在加载之前将 HTML 文档作为字符串获取

javascript - 动态导入 React Material UI 图标

javascript - 在处理 Javascript 中的方法时,为什么不设置全局变量?

javascript - 如果文档高度高于视口(viewport),则执行 X

javascript - 使用挖空文本创建新行

javascript - 如何停止 `click` 通过 Accordion header 中的输入元素冒泡以避免激活 Accordion 元素