2010-01-22 40 views
1

在客戶端使用jQuery,我想知道我是否可以檢查鏈接URL是否有效(即不返回404)。這個鏈接指向另一個域,所以如果我只使用$ .get(),那麼我最終會遇到一個權限問題。我記得閱讀了一些關於使用JSONP請求的內容,但我不記得。使用jQuery檢查另一個域上的URL是否爲404?

回答

4

我發現,似乎(YQL使用)工作的解決方案:

$.getJSON("http://query.yahooapis.com/v1/public/yql?"+ 
      "q=select%20*%20from%20html%20where%20url%3D%22"+ 
      encodeURIComponent(url)+ 
      "%22&format=xml'&callback=?", 
    function(data){ 
     if(data.results[0]){ 
     // do whatever 
     } 
    } 
); 

假設您想要查詢的網址是在變量「網址」。

+0

來自http://api.jquery.com/jQuery.getJSON/的文檔: 如果指定的URL位於遠程服務器上,請將該請求視爲JSONP。有關更多詳細信息,請參閱$ .ajax()中關於jsonp數據類型的討論。 – 2010-01-22 19:10:58

+0

@TahirAkhtar這是使用JSONP來要求雅虎去檢查你是否存在頁面。這就像其他人所建議的本地代理解決方案,但使用第三方代理(雅虎),而不是本地代理。 – rjmunro 2012-03-26 10:47:37

+0

啊,非常感謝!你爲我節省了很多工作!這有助於我製作一個腳本來檢查另一個網站上的URL是否已經死亡。 – 2012-04-04 23:47:48

1

如果您要調用的服務器可以返回JSONP格式的響應,那麼JSONP將起作用。這基本上意味着一個腳本在加載後在頁面上調用回調函數。 請參閱http://en.wikipedia.org/wiki/JSON#JSONP

在您的情況下,除非其他站點願意合作或您在自己的站點上有代理腳本,否則它將不起作用。

如果您希望您的腳本與不受您控制的網站一起使用,那麼最好的辦法是使用代理或iframe黑客。

0

您無法向其他域請求這樣的請求。這是瀏覽器中的一項安全功能。你可能不得不嘗試在iframe或其他東西中做某些事情並檢查它。

0

JSONP不會做你多......

你應該做的是使用你喜歡的語言的服務器會簡單地裝載您傳遞給它的URL並返回響應代碼上輕鬆創建一個本地代理。然後,使用jquery ajax加載您想要測試的url的代理頁面。

+0

不幸的是我沒有選擇本地代理(我只在服務器上有一些自定義選項 - 一些自定義的HTML地方,我可以加載JavaScript)。 – 2010-01-23 14:31:45