Вопрос по Ajax, не могу найти ошибку...

SF
На сайте с 11.10.2005
Offline
137
879

Решил познакомиться с ajax.

для пробы сделать простой скрипт по инструкции с этой страницы http://ajaxhelp.net/ajaxpage5.html

суть скрипта: при регистрации пользователь вводит в форме-эдите логин, как только эдит теряет курсор (событие OnBlur) посылается запрос, существует ли уже пользователь с таким именем, если такой пользователь уже существует то под эдитом выводится надпись "Это имя уже занято, пожалуйста придумайте другое".

В эксплоере когда курсор уходит из эдита, в панели состояния появляется надпись "Ошибка на странице". Ошибка видимо гдето в Ява скрипте, а где не могу понять, или подскажите как можно отлавливать ошибки в ява скрипте?

Вот код страницы _localhost/ajax5/index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
<style type="text/css">
<!--
span.hidden{
display: none;
}

span.error{
display: inline;
color: black;
background-color: pink;
}
-->
</style>

<script type="text/javascript">
<!--//
var req;

function loadXMLDoc(url) {
// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send(null);
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send();
}
}
}

function processReqChange()
{
// only if req shows "complete"
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
// ...processing statements go here...
response = req.responseXML.documentElement;

method = response.getElementsByTagName('method') \\
[0].firstChild.data;

result = response.getElementsByTagName('result') \\
[0].firstChild.data;

eval(method + '(\'\', result)');
} else {
alert("There was a problem retrieving \\
the XML data:\n" + req.statusText);
}
}
}

function checkName(input, response)
{
if (response != ''){
// Response mode
message = document.getElementById('nameCheckFailed');
if (response == '1'){
message.className = 'error';
}else{
message.className = 'hidden';
}
}else{
// Input mode
url = 'http://localhost/ajax5/checkUserName.php?q=' \\
+ input;
loadXMLDoc(url);
}

}

//-->
</script>
</head>

<body>
<input id="username" name="username" type="text"
onblur="checkName(this.value,'')" />
<span class="hidden" id="nameCheckFailed">
Это имя уже занято, пожалуйста придумайте другое. </span>
</body>
</html>

А вот код страницы _localhost/ajax5/checkUserName.php , в которой проверяется вводимое имя, Эта страница работает кстате хорошо :) я проверял _localhost/ajax5/checkUserName.php?q=fred , выводится

<?xml version="1.0" encoding="UTF-8"  

standalone="yes"?>
<response>
<method>checkName</method>
<result>1
</result>
</response>

<?php   

header('Content-Type: text/xml');

function nameInUse($q)
{
if (isset($q)){
switch(strtolower($q))
{
case 'drew' :
return '1';
break;
case 'fred' :
return '1';
break;
default:
return '0';
}
}else{
return '0';
}

}
?><?php echo '<?xml version="1.0" encoding="UTF-8"
standalone="yes"?>'; ?>
<response>
<method>checkName</method>
<result><?php
echo nameInUse(@$_GET['q']) ?>
</result>
</response>

Ошибка видимо гдето в Ява скрипте, а где не могу понять, или подскажите как можно отлавливать ошибки в ява скрипте?

Инструкция: Как Правильно Делать Сайты: Домен, Хостинг, Установка CMS (http://www.3sd.ru/kak-delat-site/index.php).
H
На сайте с 26.07.2007
Offline
17
#1

Для отладки Javascript советую использовать firefox + дополнение firebug

С Уважением,
Вячеслав
SF
На сайте с 11.10.2005
Offline
137
#2

hurricane, спасибо, пойду ставить firebug.

И еще, может у кого есть готовые скрипты похожие на мой пример , но рабочеспособные, сбросите мне, а я сам с ними разберусь add_url(собака)mail.ru

КМ
На сайте с 08.03.2007
Offline
66
#3
SellingFeis:
или подскажите как можно отлавливать ошибки в ява скрипте?

Для этого есть отличное средство: FireFox + FireBug

H
На сайте с 26.07.2007
Offline
17
#4

по поводу ошибки - вот исправленная версия файла index.php - будут вопросы - с удовольствием отвечу:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
<style type="text/css">
<!--
span.hidden{
display: none;
}

span.error{
display: inline;
color: black;
background-color: pink;
}
-->
</style>

<script type="text/javascript">
<!--//
var req;

function loadXMLDoc(url) {

// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {

req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send(null);
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {

req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send();
}
}
}

function processReqChange()
{

// only if req shows "complete"
if (req.readyState == 4) {
// only if "OK"
if (req.status == 200) {
// ...processing statements go here...
response = req.responseXML.documentElement;



method = response.getElementsByTagName('method')[0].firstChild.data;

result = response.getElementsByTagName('result')[0].firstChild.data;

eval(method + '(\'\', result)');
} else {
alert("There was a problem retrieving the XML data:\n" + req.statusText);
}
}
}

function checkName(input, response)
{
if (response != ''){
// Response mode
message = document.getElementById('nameCheckFailed');
if (response == 1){
message.className = 'error';

}else{
message.className = 'hidden';

}
}else{
// Input mode
url = 'checkUserName.php?q='+ input;
loadXMLDoc(url);
}

}

//-->
</script>
</head>

<body>
<input id="username" name="username" type="text"
onblur="javascript:checkName(this.value,'')" />
<span class="hidden" id="nameCheckFailed">Name not available</span>
</body>
</html>
SF
На сайте с 11.10.2005
Offline
137
#5

hurricane, Слав, мегаспасибо!

Все заработало!

сейчас разберусь еще с дебагером и думаю дела пойдут.

Давно надо было начать осваивать Ajax... наконец стронулось с места. :)

H
На сайте с 26.07.2007
Offline
17
#6

Не за что. Рад, что смог помочь.

prlink
На сайте с 05.05.2006
Offline
195
#7
SellingFeis:
hurricane, Слав, мегаспасибо!
Все заработало!
сейчас разберусь еще с дебагером и думаю дела пойдут.
Давно надо было начать осваивать Ajax... наконец стронулось с места. :)

Главное употреблять аякс там, где это необходимо и будет все ок. А то некоторые его используют "и в хвост и в гриву"...🚬

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