• 使用jquery插件测试url链接是否有效及js ping url


    jquery的ping插件://要用的需要明白代码及自己改些地方

    (function($) {
        $.fn.ping = function(options) {
            var opts = $.extend({}, $.fn.ping.defaults, options);
            var stime = new Date().getTime();
            return this.each(function() {
                var ping, requestTime, responseTime ;
                var target = $(this);
                function ping(){
                    $.ajax({url: opts.getUrl(target.html())+'/'+ Math.random() + '.html',  //设置一个空的ajax请求
                        type: opts.type,
                        dataType: 'html',
                        timeout: opts.timeout,
                        beforeSend : function() {
                            requestTime = new Date().getTime();
                        },
                        complete : function() {
                            responseTime = new Date().getTime();
                            ping = Math.abs(requestTime - responseTime);
                            $('#'+target.html().replace('.','_')).text(ping + opts.unit);
                            //target.text(ping + opts.unit);
                        }
                    });
                }
                var etime = new Date().getTime();
                if(Math.abs(stime - etime)<opts.timeout){
                    ping();  //无论如何都要执行一次
                    opts.interval != 0 && setInterval(ping,opts.interval * 1000);
                }
            });
        };
        $.fn.ping.defaults = {
            type: 'GET',
            timeout: 10000,
            interval: 3,
            unit: 'ms',
            isUrl:function(url){    //验证url是否有效
               var strReg = "^((https|http)?://)?"
                + "(([0-9]{1,3}.){3}[0-9]{1,3}" //
                + "|" //
                + "([0-9a-z_!~*'()-]+.)*" //
                + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]." //
                + "[a-z]{2,6})" //
                + "(:[0-9]{1,4})?" //
                + "((/?)|" //
                + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
                var re=new RegExp(strReg);
                return re.test(url);
               },
            getUrl:function(url){    //保证url带http://
                var strReg="^((https|http)?://){1}"
                var re=new RegExp(strReg);
                return re.test(url)?url:"http://"+url;
            }
        };
    })(jQuery);

     

    js ping url:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>HTTP Ping</title>
    <style>
    html{height: 100%;overflow: hidden;}
    body{background: #000;color: #C0C0C0;font-weight: bold;font-size: 14px;font-family: Lucida Console;height: 100%;margin: 0 0 0 5px;}
    #divInput{height: 10%;}
    #divContent{height: 90%;overflow: auto;}
    #txtTimeout{ 40px;}
    button{    margin-left: 10px;}
    </style>
    </head>
    <body>
    <div id="divInput">
        <span>URL:</span>
        <input id="txtURL" type="text" />
        <span>Timeout:</span>
        <input id="txtTimeout" type="text" value="2000" />
        <input id="btnSwitch" type="button" value="Start" onclick="handleBtnClick()" />
        <hr/>
    </div>
    <div id="divContent"></div>
    <script>
    var intStartTime;
    var objIMG = new Image();
    objIMG.onload =
    objIMG.onerror =
    function(){
        /*
         * 有回应,取消超时计时
         */
        clearTimeout(intTimerID);
        if(!bolIsRunning || bolIsTimeout)
            return;
        var delay = new Date() - intStartTime;
        println("Reply from " +
                strURL +
                " time" +
                ((delay<1)?("<1"):("="+delay)) +
                "ms");
        arrDelays.push(delay);
        /*
         * 每次请求间隔限制在1秒以上
         */
        setTimeout(ping, delay<1000?(1000-delay):1000);
    }
    function ping(){
        /*
         * 发送请求
         */
        intStartTime = +new Date();
        intSent++;
        objIMG.src = strURL + "/" + intStartTime;
        bolIsTimeout = false;
        /*
         * 超时计时
         */
        intTimerID = setTimeout(timeout, intTimeout);
    }
    function timeout(){
        if(!bolIsRunning)
            return;
        bolIsTimeout = true;
        objIMG.src = "X:\\";
        println("Request timed out.");
        ping();
    }
    </script>
    <script>
    var $ = function(v){return document.getElementById(v)};
    var arrDelays = [];
    var intSent;
    var bolIsRunning = false;
    var bolIsTimeout;
    var strURL;
    var intTimeout;
    var intTimerID;
    var objBtn = $("btnSwitch");
    var objContent = $("divContent");
    var objTxtURL = $("txtURL");
    objTxtURL.value = window.location.host;
    function handleBtnClick(){
        if(bolIsRunning){
            /*
             * 停止
             */
            var intRecv = arrDelays.length;
            var intLost = intSent-intRecv;
            var sum = 0;
            for(var i=0; i<intRecv; i++)
                sum += arrDelays[i];
            objBtn.value = "Start";
            bolIsRunning = false;
            /*
             * 统计结果
             */
            println(" ");
            println("Ping statistics for " + strURL + ":");
            println("  Packets: Sent = " +
                    intSent +
                    ", Received = " +
                    intRecv +
                    ", Lost = " +
                    intLost +
                    " (" +
                    Math.floor(intLost / intSent * 100) +
                    "% loss),");
            if(intRecv == 0)
                return;
            println("Approximate round trip times in milli-seconds:");
            println("  Minimum = " +
                    Math.min.apply(this, arrDelays) +
                    "ms, Maximum = " +
                    Math.max.apply(this, arrDelays) +
                    "ms, Average = " +
                    Math.floor(sum/intRecv) +
                    "ms");
        }else{
            /*
             * 开始
             */
            strURL = objTxtURL.value;
            if(strURL.length == 0)
                return;
            if(strURL.substring(0,7).toLowerCase() != "http://")
                strURL = "http://" + strURL;
            intTimeout = parseInt($("txtTimeout").value, 10);
            if(isNaN(intTimeout))
                intTimeout = 2000;
            if(intTimeout < 1000)
                intTimeout = 1000;
            objBtn.value = "Stop ";
            bolIsRunning = true;
            arrDelays = [];
            intSent = 0;
            cls();
            println("Pinging " + strURL + ":");
            println(" ");
            ping();
        }
    }
    function println(str){
        var objDIV = document.createElement("div");
        if(objDIV.innerText != null)
            objDIV.innerText = str;
        else
            objDIV.textContent = str;
        objContent.appendChild(objDIV);
        objContent.scrollTop = objContent.scrollHeight;
    }
    function cls(){
        objContent.innerHTML = "";
    }
    </script>
    </body>
    </html>

  • 相关阅读:
    电容的用法:去耦、旁路、滤波等
    成为出色工程师的十大要素
    常用三极管的区别 9012 9013 9014 9015 8550 8050
    照明的几个光学概念
    PCB元件封装
    为什么诈骗短信看上去那么弱智
    摄像·镜头
    LED家居照明
    光色的应用与照度范围
    PowerPCB(PADS)常见问题全集
  • 原文地址:https://www.cnblogs.com/see7di/p/2239783.html
Copyright © 2020-2023  润新知