在javascript中取消加载页面

时间:2010-10-13 16:20:58

标签: javascript

我定义了一个链接&lt; a href =“http://www.example.com”&gt; Hello&lt; / a&gt;。当我点击此链接时,javascript应该检查链接是否存在/ valid.if是的,页面应该加载或页面应该重定向到另一个页面。我正在使用javascript ajax来检查页面是否存在。我正在使用条件xmlhttp.status == 200.但它不能正常工作。这是代码:< / p>

function check(url){
    xmlHttp.open("GET", url, true);
    xmlHttp.onreadystatechange=function(){

        if(xmlHttp.readyState==4){
            if (xmlHttp.status==200) 
            {
                alert("Page  Available");
            }
            else 
            {
                window.location.href= "http://www.hello.com";
            }
        }
    }

    xmlHttp.send(null);
}
</script>

</head>
<body>
<a href="http://www.example.com" onclick="check(this)">Click this Link</a>

这里xmlHttp.status == 200不工作。任何人都可以帮助我吗?

6 个答案:

答案 0 :(得分:2)

好的,多点:

  1. onclick="check(this)"不会将URL传递给check函数,而是传递链接对象。因此,如果要传递URL,则必须引用href属性。
  2. 如果您想在之后输出其他内容,则不应设置window.location.href。设置当前位置可以使浏览器直接更改页面,因此alert可能不会更改。
  3. 为什么if每次更改Google的位置?
  4. 您只能 通过在事件处理程序中返回false来中止链接点击的处理。
  5. AJAX调用是第一个参数, asynchronous 。但是当您中止页面加载时(通过单击链接),AJAX调用将中止。
  6. 您无法从AJAX事件处理程序(false)内部返回onreadystatechange以停止处理链接。到达那里时,链接已经处理完毕。
  7. 那,你正在尝试的,并不是很好。应该由用户检查页面是否存在。将链接重定向到其他页面(此处为google)是非常错误的,因为链接不起作用;至少我会很困惑。另外,通过使用AJAX检查,您可以让用户加载页面两次,这也很糟糕。

答案 1 :(得分:0)

浏览器不允许您发出跨域请求。

详情请见hereherehere

答案 2 :(得分:0)

  1. 必须来自同一个域或域必须使用CORS for safari 4和Fx 3.5+
  2. 您需要在点击
  3. 上返回false
  4. 您需要使用url.href
  5. 您需要在重定向
  6. 之前发出警报

    function check(link){ /* ONLY works from same domain OR if the target implemented CORS! */

        xmlHttp.open("GET", link.href, true);  
    
        xmlHttp.onreadystatechange=function(){
    
        if(xmlHttp.readyState==4){
            if (xmlHttp.status==200) 
            {
                alert("Page  Available");
            }
            else 
            {
                window.location.href= "http://www.hello.com";
            }
        }
    }
    
    xmlHttp.send(null);
    return false; // imperative
    }
    </script>
    
    </head>
    <body>
    <a href="http://www.example.com" onclick="return check(this)">Click this Link</a>
    

答案 3 :(得分:0)

您的onclick属性应包含:

 check(this.href);

答案 4 :(得分:0)

您没有通过网址。您正在传递链接的DOM元素。你需要使用url.href或者在jQuery中你需要使用$(this).attr('href')。

JavaScript也不会阻止链接被跟踪。你需要让函数返回false,并且在它之前没有错误,或者你可以使用jQuery和event.preventDefault()。

最后,即使您因为相同的原始政策而做了所有事情,它也只适用于您所在的同一域上的链接。 Here is a link to a jQuery version of your code.

答案 5 :(得分:0)

好的,你差不多了。到目前为止有很多有用的评论。但是从服务器重定向而不是从客户端重定向可能更好。 我个人会将参数传递给服务器上的函数(服务器脚本的url)(使用jQuery捕获href)到服务器上的函数,然后使用传递的url进行(head)检查并通过服务器重定向它们它存在。 如果该站点不存在,则不要重定向,只需将JSON发送回客户端,让他们知道该站点不存在。