Проверка доступности сервера перед переходом по ссылке

12
A
На сайте с 18.10.2007
Offline
125
8670

Возникла необходимость при клике по ссылке проверять, доступен ли сервер с этой ссылкой, и совершать переход только если ответ сервера = 200. Где-то я перемудрил, по-моему. В консоли вижу что запрос уходит, но переход происходит всегда, независимо от того, какой ответ получен.

<script type="text/javascript">

$(document).ready(function() {
$('body').on('click', 'a', function() {
var link = $(this).attr('href');
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange=function() {
if (xhttp.readyState == 4 && xhttp.status !== 200) {
return false;
}
}
xhttp.open('GET', link, false);
xhttp.send();
});
});
</script>
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
дани мапов
На сайте с 06.09.2012
Offline
204
#1

Запрос асинхронный - браузер не ждет ответ, и сразу происходит переход по ссылке. Попробуйте так:


....
var link = $(this).attr('href');
xhttp = new XMLHttpRequest();
xhttp.open('GET', link, false);
xhttp.send();
if(xhttp.status != 200) {
return false;
}
...
Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
siv1987
На сайте с 02.04.2009
Offline
427
#2

Если кроссдоменные запросы к домену запрещены ничего не получите.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#3

Как вариант: через аякс отправляем запрос на свой пхп-скрипт, который проверяет переданный ему УРЛ на доступность.

Подпись))
6666
На сайте с 10.01.2005
Offline
505
#4
siv1987:
Если кроссдоменные запросы к домену запрещены ничего не получите.

А можно подробнее, если не сложно?

Каждое мое сообщение проверила и одобрила Елена Летучая. (c) Для меня очень важно все что Вы говорите! (http://surrealism.ru/123.mp3) .
Mik Foxi
На сайте с 02.03.2011
Offline
1164
#5
6666:
А можно подробнее, если не сложно?

по умолчанию в браузерах для безопасности зарещены кроссдоменные обращения жабаскриптам.

Антибот, антиспам, веб файрвол, защита от накрутки поведенческих: https://antibot.cloud/ Форум на замену серчу: https://foxi.biz/
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#7
6666:
А можно подробнее, если не сложно?

Если были бы разрещены кроссдоменные запросы, то тогда был бы хаус.

Я бы мог встроить в свой сайт скриптик на Жабе, который бы воровал твои куки от контакта;)

A
На сайте с 18.10.2007
Offline
125
#8
siv1987:
Если кроссдоменные запросы к домену запрещены ничего не получите.

Запрос происходит в пределах одного домена.

siv1987
На сайте с 02.04.2009
Offline
427
#9
alarm:
Запрос происходит в пределах одного домена.

Ну тогда юзайте как подсказали выше синхронный запрос


var link = $(this).attr('href');
var ret = true;
$.ajax({
url: link,
async: false,
complete: function(q){
if(q.status != 200){
ret = false;
}
}
});
return ret;
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#10

А может у ссылок на Вашем сайте путь прописан абсолютный(http://site.ru)?

Попробуйте это:


<script type="text/javascript">
$(document).ready(function() {
$('body').on('click', 'a', function() {
var link = $(this).attr('href');
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange=function() {
if (xhttp.readyState == 4 && xhttp.status !== 200) {
return false;
}
else{
alert('Главная страница Работает!!!');
}
}
xhttp.open('GET', '/', false);
xhttp.send();
});
});
</script>

Еще раз посмотрел код(то что я написал: не правильно!) и поржал:D

http://xmlhttprequest.ru (начиная с "Асинхронный XMLHttpRequest"). Найдите 1 отличие называется. Не найдете - утром скажу;)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий