Вопрос по iframe, javascript, http-status-code-404 – использование JavaScript для определения наличия URL-адреса перед отображением в iframe

26

Я использую JavaScript для передачи динамического URL-адреса в iframe src. но иногда URL-адрес не существует, как я могу обнаружить несуществующий URL-адрес заранее, чтобы я мог скрыть iframe, что с ошибкой 404.

Ваш Ответ

5   ответов
49

# x6703; & # x529F; & # x592B; '. Я попробовал этот код как есть, и он не работал хорошо. В коде Дерека есть три проблемы: & # x6703; & # x529F; & # x592B; '.

The first is that the time to async send the request and change its property 'status' is slower than to execute the next expression - if(request.status === "404"). So the request.status will eventually, due to internet band, remain on status 0 (zero), and it won't achieve the code right below if. To fix that is easy: change 'true' to 'false' on method open of the ajax request. This will cause a brief (or not so) block on your code (due to synchronous call), but will change the status of the request before reaching the test on if.

The second is that the status is an integer. Using '===' javascript comparison operator you're trying to compare if the left side object is identical to one on the right side. To make this work there are two ways:

Remove the quotes that surrounds 404, making it an integer; Use the javascript's operator '==' so you will be testing if the two objects are similar.

The third is that the object XMLHttpRequest only works on newer browsers (Firefox, Chrome and IE7+). If you want that snippet to work on all browsers you have to do in the way W3Schools suggests: w3schools ajax

Код, который действительно работал для меня:

var request;
if(window.XMLHttpRequest)
    request = new XMLHttpRequest();
else
    request = new ActiveXObject("Microsoft.XMLHTTP");
request.open('GET', 'http://www.mozilla.org', false);
request.send(); // there will be a 'pause' here until the response to come.
// the object request will be actually modified
if (request.status === 404) {
    alert("The page you are trying to reach is not available.");
}
плюс 1 из-за вашей низкой репутации. (и отличный ответ :))
Upvote, поэтому он может иметь достаточно репутации, чтобы прокомментировать ответ Дерека & # x6703; & # x529F; & # x592B;! (Хороший ответ, не позволяйте ничему остановить вас, брат)
@ IE5Master Где вы нашли упомянутое отношение между W3C и W3Schools? Никто не упомянул W3C здесь.
Просто отметьте, что: синхронный XMLHttpRequest в основном потоке устарел из-за его пагубных последствий для конечного пользователя. Для получения дополнительной помощи, проверьтеxhr.spec.whatwg.org.
НЕТ НЕТ НЕТ. Пожалуйста, не связывайте ничего с W3C со школами W3. Они не связаны каким-либо образом.
4

Методы обратного вызова jqXHR.success (), jqXHR.error () и jqXHR.complete (), представленные в jQuery 1.5, устарели с версии jQuery 1.8. Чтобы подготовить ваш код для их возможного удаления, используйте взамен jqXHR.done (), jqXHR.fail () и jqXHR.always ().

$.get("urlToCheck.com").done(function () {
  alert("success");
}).fail(function () {
   alert("failed.");
});
Я рад принять ответ JQuery. :)
это не ванильный JavaScript, это JQuery. Я не думаю, что люди приходят сюда в поисках ответов jQuery.
1

если вы получите 200 обратно, это означает, что страница существует. Попробуйте это (используя jQuery), функция является функцией обратного вызова success при успешной загрузке страницы. Обратите внимание, что это будет работать только на сайтах в вашем домене, чтобы предотвратить XSS. Другие домены должны быть обработаны на стороне сервера

$.get(
   yourURL,
   function(data, textStatus, jqXHR) {
      //load the iframe here...
   }
);
24

Используйте XHR и посмотрите, отвечает ли он вам 404 или нет.

request.open('GET', 'http://www.mozilla.org', true);
request.onreadystatechange = function(){
    if (request.readyState === 4){
        if (request.status === 404) {  
            alert("Oh no, it does not exist!");
        }  
    }
};
request.send();

Но обратите внимание, что он будет работать только на том же происхождении. Для другого хоста вам придетсяиспользовать язык на стороне сервера чтобы сделать то, что вам придется выяснить самостоятельно.

@JerryGoyal Оберните это в кавычки (`)
я использую хром, это будет работать? Mario
@ A1rPun - ..... Исправлено.
@Mario - да, если он находится в одном источнике из-за политики одного и того же источника.
But notice that it will only work on the same origin.
2

если URL находится в том же домене.

Если это удаленный домен, вы можетеесть серверный скрипт на вашем собственном домене проверьте удаленный URL.

Похожие вопросы