2017-08-04 85 views
1

我已經爲一個項目創建了一個小的JavaScript庫,並且在這個庫中我有一個函數可以檢測我們是否在404頁面上。XHR捕獲404錯誤

var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() { 
     if (this.readyState == 4) { 
      if (this.status == 404) { 
       console.log("404 detected"); 
      } 
     } 
    } 
    xhr.open('HEAD', window.location.href); 
    xhr.send(); 

它適用於大多數情況。但是我有一個問題。

當我通過POST查詢到達頁面時,該函數告訴我這是一個404頁面。我認爲這是因爲xhr請求嘗試使用經典的GET查詢調用頁面(爲了不重新提交表單),然後webapp返回404,因爲該頁面不接受GET查詢。

我試圖找到一種方法來檢測當我在這種情況下,然後,不要觸發「404檢測到」。我不知道這是甚至可能與JavaScript。

任何想法?

+1

您目前正在用'HEAD'方法發送它。也許該服務器只接受該路由上的「POST」,並返回一個404到其他地方。嘗試使用'POST'發送它 – litelite

+0

@litelite:問題是我可以檢測在JavaScript中調用了哪個協議頁面。 – Xavierh95

回答

3

我認爲這是因爲XHR請求嘗試採用了經典的GET查詢

排序來調用的頁面。見the specification

HEAD方法是相同,除了在應答服務器不能 發送消息主體爲GET(即,響應終止於 標題部分的端部)。


我試圖找到一種方法來檢測,當我在這種情況下我,然後不火「檢測404」。我不知道這是甚至可能與JavaScript。

JavaScript在很大程度上是無足輕重的。它歸結爲HTTP。無論你用什麼編程語言來做HTTP請求,答案都是一樣的。

您提出請求並查看響應是什麼。有一個特定的請求類型,用於從GET請求中獲取標題而不使用正文(您正在使用HEAD)。它不是100%可靠的,因爲有些服務器沒有正確實施它。

標準中沒有像POST那樣的東西。

找出給定的請求是否會得到404響應的唯一100%可靠的方法是實際提出請求。

+0

JS是我在頁面/請求中檢索信息的唯一方式。所以也許對我原來的問題的答案是「不,這是不可能的」 – Xavierh95

相關問題