Тема банальна, но для меня нова... Пытаюсь сделать проверку логина на дубли, без перезагрузки страницы. js-код таков: [js]<script type="text/javascript"> function checker(log) { var xmlhttp; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); } xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { var reply=xmlhttp.responseText; document.getElementbyid("nck").value=reply; }; }; }; xmlhttp.open('GET', 'check.php?login='+log, true); xmlhttp.send(null); } </script> [/js] эта функция висит на обработчике onblur текстовой строке в html'е, вызывается как onblur="checker(this.value)" php-скрипт таков: PHP: <? mysql_connect("localhost", "abc", "cba") or die("Error connect!"); mysql_select_db("db"); $sql = "SELECT count(*) FROM users WHERE log='".$_GET['log']."'"; $query = mysql_query($sql); $res = mysql_fetch_array($query); if ($res[0] == 0) { return 'OK'; } else { return 'Error'; }; mysql_close; в результате, нет никакого ответа от серверного скрипта. если поставить алерт в куске проверки readystate == 4, то он выдаёт, что status 0, алерт на responsetext выдаёт просто текст php-скрипта. не понимаю, в чём ошибка.
а если return echo 'OK'; ? можно даже просто echo 'OK'; у вас же не функция, чтобы передавать управление
без толку мне ещё непонятно, почему ответ от сервера приходит (readystate 4), а вот status 200 не наступает
обязательно со своим XMLHttpRequest делать, может подключит jquery например? если к php скрипту на прямую передать логин то нормально все? обычно во всех примерах сначала делают open потом onreadystatechange определяют
Похоже на то, что js ничего не отсылает. Да, нужен свой XMLHttpRequest. Лучше один раз самому сделать и потом пользоваться обёртками с большей степенью понимания. Если open ставить вперёд, то тоже самое. Да и, в общем-то, мы же просто вешаем функцию на событие готовности, так что без разницы, где открыть соединение, мне кажется.
Попробуй заменить: [js]# var xmlhttp; # try { # xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); # } catch (e) { # try { # xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); # } catch (E) { # xmlhttp = false; # } # } # if (!xmlhttp && typeof XMLHttpRequest!='undefined') { # xmlhttp = new XMLHttpRequest(); # } [/js] На: [js] var xmlhttp= (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); [/js]
Не отсылает, потому что при переходе фокуса с элемента, в который пишется логин, плагин ничего не выдаёт. php-скрипт работает точно, он протестен на заданных в нём значениях.
Срабатывает. если поставить алерт на выведение параметра функции - содержимое текстового поля с логином, то выдаётся значение.
в общем, проблема именно в том, что js не отсылает get-запрос. потестил ещё одним перехватчиком http-пакетов. но в чём ошибка в скрипте, не могу понять. браузеру никаких запрещений, конечно, нет.
[js]<script type="text/javascript"> function Check(log) { var xmlhttp; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); } xmlhttp.open('GET', "check.php?login="+log, true); xmlhttp.onreadystatechange = function(){ if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)){ document.getElementById("nck").value=xmlhttp.responseText; } }; xmlhttp.send(null); } </script>[/js]