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