проверяем существование адреса.
Изучаю js второй день, не могу никак решить данную проблему.
Проблема: есть форма ввода, в нее юзер вводит некий url адрес, скрипт в свою очередь должен проверить его на вшивость, перед тем, как отправить его дальше. 1.Не пустое ли поле? 2.Похоже ли это на адрес? 3.Существует ли такой url? с первыми двумя пунктами все акей, а вот третий игнорится категорически. Повелители js, молю, поясните, в чем ошибка и как ее исправить?:help: :help: :help:
<html>
<head>
<script type='text/javascript'>
function validate(){
var y=document.forms['form']['http'].value;
//проверяем пункт 1
if (y.length==0){
document.getElementById('httpf').innerHTML='*I think someone does not want to work?';
return false;
}
count = 0;
pos = y.indexOf(".");
while ( pos != -1 ) {
count++;
pos = y.indexOf(".",pos+1);
}
//проверяем пункт 2
if (count==0){
document.getElementById('httpf').innerHTML='*not true! stop lying to me!';
return false;
}
//проверяем пункт 3
var xmlhttp = getXmlHttp()
xmlhttp.open('GET', 'httpf', false);
xmlhttp.send(null);
if(xmlhttp.status != 200) {document.getElementById('httpf').innerHTML='*false url';
return false;
}
}
</script>
</head>
<body>
<form name='form' onsubmit='return validate()'>
http:// <input type='text' name='http'> <span style='color:red' id='httpf'></span><br />
<input type='submit' value='send'>
</form>
</body>
</html>
|
...
url = document.getElementById('httpf').innerHTML
xmlhttp.open('GET', url, false);
...
|
Meshok_smexa,
а время пока ходит запрос неучли ... подождите идёт проверка -- ок -- submit формы тойже функцией но без всяких проверок уже - где-то флаг глобально - иначе просто сообщение об ошибке |
рони, вроде понимаю о чем вы, но как реализовать это в коде, не могу понять... можно попросить у вас пояснения кодом? каким то примером?
|
Meshok_smexa,
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<script>
var flag = false;
function validate(){
if(flag) return true;
var y=document.forms['form']['http'].value;
//проверяем пункт 1
if (y.length==0){
document.getElementById('httpf').innerHTML='*I think someone does not want to work?';
return false;
}
var regexp = /^(((f|ht)tp(s)?):\/\/)?(www\.)?([a-zA-Z0-9\-]{1,}\.){1,}?([a-zA-Z0-9\-]{2,}\.[a-zA-Z0-9\-]{2,4}(\.[a-zA-Z0-9\-]{2,4})?)(\/|\?)?$/
//проверяем пункт 2
if (!regexp.test(y)){
document.getElementById('httpf').innerHTML='*not true! stop lying to me!';
return false;
}
//проверяем пункт 3
document.getElementById('httpf').innerHTML='pause';
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open('GET', y, false);
xmlhttp.onreadystatechange = update;
xmlhttp.send(null);
function update()
{
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
flag = true;
//для проверки
document.forms['form'].submit()};
if (xmlhttp.readyState === 4 && xmlhttp.status === 404)
{document.getElementById('httpf').innerHTML='*false url';}
}
return false;
}
</script>
</head>
<body>
<form name='form' onsubmit='return validate()' action="" >
http:// <input type='text' name='http'> <span style='color:red' id='httpf'></span><br />
<input type='submit' value='send'>
</form>
</body>
</html>
|
рони,
учесть разные версии браузера однозначно не догадалась бы, спасибо!)) и с флагом теперь все понятно. Однако, ваш скрипт тоже не говорит о плохом нерабочем url, как же быть? |
Цитата:
|
рони,
if (xmlhttp.readyState === 4 && xmlhttp.status === 404)
{document.getElementById('httpf').innerHTML='*false url';
return false;
вот тут, если я все верно понимаю, конечно. Он должен выругаться и отказаться отправлять адрес. |
Meshok_smexa,
если страницы несуществует Цитата:
смотрите проверку с помощью regexp пост 5 up. |
| Часовой пояс GMT +3, время: 18:58. |