2015-11-14 5 views
0

Я в настоящее время проверки коды состояния текущей страницы с этим кодом:Handle недоступной страницы (StatusCode)

$.ajax({ 
type: 'HEAD', 
url: window.location.href, 
success: function() { 
    console.log("Ok"); 
},  
error: function() { 
    console.log("error"); 
} 
}); 

страница существует, если код ответа находится между 200 - 299 или нет, если кодов ответа в между 400 - 499.

Но для примера ошибка 405 для меня не является ошибкой, страница хорошо отображена, поэтому нет причин быть в состоянии ошибки.

Так что я добавил еще одно испытание:

error: function(jqXHR, textStatus, errorThrown) { 
    console.log('jqHRX : ' + JSON.stringify(jqXHR) + ' textStatus : ' + textStatus + ' errorThrown : ' + errorThrown); 
    if (errorThrown != "OK") //or jqHRX.statusText 
    console.log("error"); 
} 

Для Exemple, если я просматриваю к странице, которая возвращает 405 код, я буду иметь этот результат: jqHRX : {"readyState":4,"responseText":"","status":405,"statusText":"OK"} textStatus : error errorThrown : OK

И если это 404 ошибка: jqHRX : {"readyState":4,"responseText":"","status":404,"statusText":"Not Found"} textStatus : error errorThrown : Not Found error

  1. Итак, все ли страницы с errorThrown равен "OK" в настоящее время? Я случайно нашел пример 405, поэтому я не знаю, является ли это изолированным случаем или нет.
  2. Есть ли лучший способ справиться с этим?

Спасибо!

Alex

редактировать: для Exemple, https://developer.chrome.com/home возвращает 405 с моим кодом, но в моем приложении нет необходимости рассматривать это как ошибку.

Странная вещь, вы можете проверить StatusCode с http://tools.seobook.com/server-header-checker/: результат 405 Но если проверить с http://httpstatus.io/ результат 200

ответ

1

TL; др: Использование GET вместо ГОЛОВЫ будет работать. Get на самом деле метод, который не разрешен, который забросил ошибку 405.

: Спасибо коллеге, что показывает мне почтальона.

Это позволило мне проверить код состояния страницы с помощью различных методов, таких как GET, PUT, POST, HEAD, LOCK и т. Д. И, похоже, для кучи веб-сайтов (документация на Chrome, Amazon и т. Д.) HEAD вернулся 405 в то время как ПОЛУЧИТЬ вернулось 200

Согласно w3.org

метод ГОЛОВЫ идентичен GET, за исключением, что сервер не должен возвращать тело сообщения в ответ.

Так что в моем случае иногда я нашел сайт, который не разрешал запрос HEAD.

решаемые remplacing код по:

$.ajax({ 
type: 'GET', 
url: window.location.href, 
error: function() { 
    console.log("error"); 
} 
}); 
1

Из JQuery документации:

«Когда возникает ошибка HTTP , errorThrown получает текстовую часть статуса HTTP, такую ​​как «Не найден» или «Внутренняя ошибка сервера».

Опираясь на это не является оптимальным в качестве сервиса er может предоставить вам любой статусText, который они считают правильным. Поэтому я могу в принципе отправить вам 500 страниц с ошибкой. «Я знаю foo лучше, чем bar».

Также страницы с 405 не должны определенно «хорошо отображаться», поскольку эта ошибка подразумевает, что используемый HTTP-метод не разрешен на этой странице. Обычно наблюдается, когда вы пытаетесь использовать конечные точки GET, предназначенные только для POST, PUT, PATCH.

Если у вас есть нестандартная обработка ошибок (вы не считаете ошибки, подобные 405, как ошибки внутри вашего приложения), используйте код статуса ответа, а не что-либо еще. Вы также можете рассмотреть возможность использования jQuery.ajax().complete() для обработки как успеха, так и ошибки в одном месте.

+0

Спасибо за ваше время. С вашего комментария я немного расследовал этот рассказ о «методах, которые не допускаются», и я решил, что проблема заключается в моих методах HEAD. С GET у меня есть код состояния 200, который я ожидал! – Kureb