js判断远程链接是否有效

最近在研究javascript,找到了这个老问题。我查了以前的贴子都说是用XMLHTTP请求一次来确认链接的文件是否存在。

  但是XMLHTTP的测试方式存在有巨大的代价,因为XMLHTTP的请求必须将被请求的文件下载完毕后才能返回结果。如果要测试的连接是一个比较大的文件(如:1M或100M以上的东西)的话,就会需要大量的内存和时间来等待,这个对于只是想知道它存不存在的目的来说,代价太大了。

  我曾想过用XMLHTTP来请求,然后链接成功后主动断开请求,不过似乎XMLHTTP没有这样的方式..


        其实,此问题还可以引申为 判断网络是否连接;网络爬虫程序等等应用。下面公布这个问题的解法:

        首先,XMLHTTP的Head方法是不用全部内容返回的,它只返回Header的那部分简短内容,基于此,可使用下面的代码实现。

<!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>
    <title>Untitled Page</title>

    <script type="text/javascript">
        function CheckStatus(url)
        {
            XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP")
            XMLHTTP.open("HEAD",url,false)
            XMLHTTP.send()
            return XMLHTTP.status==200
        }
        
        function NetPing()
        {
              return CheckStatus("http://www.163.com/index.html");
        }
        
        function Button1_onclick() 
        {
            var bTest=NetPing();
            if(bTest)
            {
                document.getElementById('Text1').value="网络已连接";
            }
            else
            {
                document.getElementById('Text1').value="网络未连接";
            }
        }

    </script>

</head>
<body>
    <input id="Button1" type="button" value="探测" οnclick="return Button1_onclick()" />
    <input id="Text1" type="text" />
</body>
</html>

上诉方法虽然能解决问题,但测试时间比较长,且具体的xmlhttp对象的创建还得根据不同浏览器来进行。

基于此,因为后来使用了jQuery,下面根据上诉原理使用jQuery来进行实现:

 

<!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>

    <title>Untitled Page</title>

    

    <script type="text/javascript" src="../JS/jQuery/jquery.js"></script>

 

    <script type="text/javascript">

        

        function NetPing()

        {

              $.ajax({

               type: "GET",

               cache: false,

               url: "http://www.163.com/index.html",

               data: "",

               success: function(){

                 Done(1);

               },

               error:function(){

                 Done(0);

               }

             });

        }

        

        function Done(rel)

        {

            if(rel==1)

            {

                document.getElementById('Text1').value="网络已连接";

            }

            else

            {

                document.getElementById('Text1').value="网络未连接";

            }

        }

        

        function Button1_onclick() 

        {

            NetPing();

        }

 

    </script>

 

</head>

<body>

    <input id="Button1" type="button" value="探测" οnclick="return Button1_onclick()" />

    <input id="Text1" type="text" />

</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值