Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   проверяем существование адреса. (https://javascript.ru/forum/misc/40237-proveryaem-sushhestvovanie-adresa.html)

Meshok_smexa 29.07.2013 11:26

проверяем существование адреса.
 
Изучаю 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>

ОлегА 29.07.2013 11:56

...
url = document.getElementById('httpf').innerHTML
xmlhttp.open('GET', url, false);
...

рони 29.07.2013 12:02

Meshok_smexa,
а время пока ходит запрос неучли ... подождите идёт проверка -- ок -- submit формы тойже функцией но без всяких проверок уже - где-то флаг глобально - иначе просто сообщение об ошибке

Meshok_smexa 29.07.2013 12:22

рони, вроде понимаю о чем вы, но как реализовать это в коде, не могу понять... можно попросить у вас пояснения кодом? каким то примером?

рони 29.07.2013 12:57

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>

Meshok_smexa 29.07.2013 13:15

рони,
учесть разные версии браузера однозначно не догадалась бы, спасибо!)) и с флагом теперь все понятно. Однако, ваш скрипт тоже не говорит о плохом нерабочем url, как же быть?

рони 29.07.2013 13:25

Цитата:

Сообщение от Meshok_smexa
тоже не говорит о плохом нерабочем url,

и как вы это проверяли? и что он должен говорить?

Meshok_smexa 29.07.2013 13:39

рони,
if (xmlhttp.readyState === 4 && xmlhttp.status === 404)
    {document.getElementById('httpf').innerHTML='*false url';
 return false;


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

рони 29.07.2013 14:16

Meshok_smexa,
если страницы несуществует
Цитата:

Сообщение от Meshok_smexa
и сервер вернул 404 -- выдаст эту строку
2.Похоже ли это на адрес?

тут лучше проверяйте похоже или нет на url
смотрите проверку с помощью regexp пост 5 up.


Часовой пояс GMT +3, время: 12:00.