2010-10-13 89 views
0

我定義了一個鏈接< a href =「http://www.example.com」>你好</a >。當我點擊這個鏈接時javascript應該檢查鏈接是否存在/ valid.if真正的,頁面應該加載或頁面應該重定向到另一個頁面。我使用javascript ajax來檢查頁面是否存在/ not.i使用條件xmlhttp.status == 200.But它不工作。代碼:在javascript中取消加載頁面

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不工作。任何人都可以幫我嗎?

+0

定義「不工作」。這是一個平等運營商,我強烈懷疑它運作正常。你的意思是,當你期望它的狀態不是200時?或者比較從未被稱爲?或者你的JS引擎的實現真的存在一些問題? – 2010-10-13 16:27:16

+2

您無法在客戶端進行跨域請求。 http://stackoverflow.com/questions/466737/why-is-cross-domain-ajax-a-security-concern – BrunoLM 2010-10-13 16:28:28

+0

完全不同的說明,如果您只對請求的狀態代碼感興趣,則應該做一個'HEAD'請求而不是'GET'。重量更輕(即更快,更便宜和「更好」),幷包含您所需的所有信息。 – 2010-10-13 16:29:09

回答

0

瀏覽器不會讓你做出一個跨域請求。

查看更多詳情here,herehere

0
  1. 必須從同一個域或域必須使用CORS在Safari 4和FX 3.5+
  2. 您需要在點擊返回false
  3. 您需要使用url.href
  4. 您需要提醒您重定向之前

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> 
+0

我試圖發佈一些腳本,所以嘔吐它:( – mplungjan 2010-10-13 16:33:20

+0

@mplugjan:縮進它正確,所以它知道它的代碼 – poke 2010-10-13 16:35:12

+0

我試過返回false; – anish 2010-10-13 16:46:55

0

你的onclick屬性應該包含:

check(this.href); 
+0

但我在funtion中得到了網址。我用一個提醒進行了檢查 – anish 2010-10-13 16:48:22

+0

您看到了URL但是這是因爲''''''元素的'toString()'方法返回URL,而不是因爲它*的URL是 – andrewmu 2010-10-13 16:59:53

2

好,多點:

  1. onclick="check(this)"沒有通過的URL check功能,但該鏈接對象的引用。所以如果你想通過URL,你必須引用href屬性。
  2. 當你想輸出別的事後你不應該設置window.location.href。設置當前位置可以使瀏覽器直接改變頁面,所以alert可能不會改變。
  3. 爲什麼if每次您將位置更改爲google?
  4. 可以中止鏈接點擊的處理,在事件處理程序返回false
  5. 作爲第一個參數說,AJAX調用是異步。但是,當你中止頁面加載時(通過點擊鏈接),AJAX調用會中止。
  6. 不能從AJAX事件處理程序(onreadystatechange)內返回false停止鏈接的處理。到達那裏時,鏈接已經處理完畢。
  7. 那麼,你正在嘗試的是不是很好。應該由用戶檢查頁面是否存在。只是因爲鏈接不起作用,將他重定向到其他頁面(這裏:google)是非常錯誤的;至少我會很困惑。同樣通過檢查AJAX,您可以讓用戶加載頁面兩次,這也不好。
+0

onclick =「check(this)」,它傳遞URL – anish 2010-10-13 16:48:58

+0

@anish:不,它通過一個對DOM元素的引用,當它被作爲字符串轉換時,它就等於URL。在'check'函數中檢查'typeof(url)'。 – poke 2010-10-13 17:01:59

0

您未通過網址。您正在傳遞鏈接的DOM元素。您需要使用url.href或在jQuery中使用$(this).attr('href')。

另外,JavaScript並未阻止鏈接被跟蹤。你需要讓函數返回false,並且在它沒有錯誤之前,或者你可以使用jQuery和event.preventDefault()。

最後,即使您做了所有因爲相同的原產地策略,它也只適用於您所在域名上的鏈接。 Here is a link to a jQuery version of your code.

0

好吧,你快到了。迄今爲止有很多有用的評論。但是從服務器而不是從客戶端重定向可能會更好。 我個人會將參數傳遞給服務器上的函數(您的服務器腳本的url)(使用jQuery捕獲href)到服務器上的函數,然後使用傳遞的url進行(頭部)檢查並通過服務器重定向它們如果存在。 如果該網站不存在,那麼不要重定向,只需將JSON發送回客戶端,並讓他們知道該網站不存在。