2009-06-26 68 views
2

測試URL我有我想在FancyBox(或任何其他疊加式彈出)打開一個URL。我不知道URL是否好,所以我想測試它。如果無效 - 我不會將fancyBox插件附加到該特定的URL,它將只是一個常規鏈接。 如何在附加插件之前測試URL?試着做一樣的東西:如何在jQuery的

$("a.overlay").each(function() { 
    var xhr = $.get(this.href, function(data, status) { 
     // never executed in case of a failed request 
    }); 
    if (xhr.status && xhr.status === 404)) { 
     // not good, do nothing 
    } else { 
     // can attach plugin here 
    } 
}); 

的問題是,xhr不會總是被定義,因爲JS不會等待完成請求。同樣,我不能使用回調函數,因爲它似乎沒有執行,如果請求失敗(我可以在Firebug中看到它,但這不是很有用)。

感謝並祝大家週末愉快。

+0

有可能使呼叫等待響應,以確保在檢查之前填入「xhr」。見下面的細節。 – StuperUser 2011-02-23 15:55:54

回答

6

你可以像這樣做,雖然我懷疑它是多麼明智的每個鏈接的請求....

$("a.overlay").each(function() { 
    var $a = $(this); 
    $.ajax({ 
     type: 'GET', 
     url: this.href, 
     success: function() { 
      // attach plugin here 
     }, 
     error: function() { 
      // not good, log it 
     }    
    }); 
}); 

如果你不打算使用的內容做任何事在頁面中,您可以將'GET'與'HEAD'切換爲僅獲取所需頁面的標題,這會更快,並讓您知道您想要的內容。

+0

是的,我可以使用.ajax(它會是一個,每頁最多兩個這樣的鏈接)。只是想知道是否還有其他一些我忽略的技巧。要回答你的問題,如果URL不好,我想記錄下案例。 – montrealist 2009-06-26 21:09:55

1

保羅給了你答案,你問換但似乎浪費我爲每個客戶端檢查每次鏈路的質量。它不僅浪費了目標的帶寬,而且浪費了客戶的時間。

這一點是可以而且應該做一次,(也許每天)在服務器端。從那裏你應該生成適當的html/js。從工程學的角度來看,這對我來說似乎是一個更明智的方法。

我不知道你正在使用什麼樣的服務器端框架,但是我曾經使用過的服務器端框架都有相當直接的http客戶端,以及chronjob/scheduled job facilities。

另外,您可以編寫的頁面,使得當天的第一個請求做了檢查,結果被緩存到磁盤(或內存)全天將來的請求。儘管第一次加載可能會有點慢。你的問題The problem is, xhr will not always be defined because JS doesn't wait for the request to complete.

+0

我不認爲它與服務器端有任何關係。這是一個前端相關問題,我必須決定如何向用戶提供信息。另外,後面的問題是開發人員沒有時間來處理這個問題,而URL可能是不正確的,因爲它是由營銷團隊使用CMS輸入的(同樣,它沒有內置的功能檢查URL的正確性)。所以在前面關注這個可能是最簡單的方法。 – montrealist 2009-06-29 13:46:03

0

我知道這是很老,但萬一有人仍然在增加跨它來了,希望有更多的選擇。從網猴http://www.webmonkey.com/2010/07/beautify-broken-links-with-catch404/

描述:在這個插件看看

但現在,我們通過阿迪 奧斯馬尼Catch404,一個jQuery插件在處理 風格斷開的鏈接。部署 Catch404您的網站,並代替 看到報告損壞鏈接的頁面, 用戶呈現一個Ajax 模態窗口(也稱爲跳了,或者 燈箱),通知他們該鏈接的 頁面ISN在那裏。窗戶還提供 他們可能想要簽出的一些替代目的地 。