Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка GET-запроса из JavaScript, куда-то он не туда отправляется 
:(
    Опции темы
check
Дата 12.8.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: нет
Всего: 23



Имеется обычная форма для проверки логина-пароля.
Проверять решил с помощью ajax.
Скрипт check.php в который отправляется GET-запрос должен выдать строчку "неверная пара логин-пароль" в случае если что-то не так. Он ее и выдает если вызывать его в строке браузера, то есть с серверной частью все в порядке.
Однако в responseText эта строка не попадает и на странице соответственно не выводится.
Ошибка происходит где-то на стадии проверки статуса, в условие if (req.readyState == 4) я попадаю, а вот в if (req.status == 200) уже нет.
Еще одна странность: GET-запрос почему-то передается самой странице с формой, хотя  никто не просит этого делать. То есть при щелчке по кнопке в строке браузера появляется такой URL: ...../Enter.php?log=rtr45&pass=trfgf

вот код страницы с формой и скриптом
Код

<script>
var req;
function init() {

 url = "check.php?log="+enter.log.value+"&pass="+enter.pass.value;
 loadXMLDoc(url)
}

function loadXMLDoc(url) {
    
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
   
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}

function processReqChange() 
{
    if (req.readyState == 4) {
        
        if (req.status == 200) {
         x = req.responseText;  
         answer(x);
       }
    }
}

function answer(resp) 
{
  mess = document.getElementById('inval');
  mess.style.display = "block";
  mess.innerHTML+= resp
}
</script>
<body bgcolor='#FFEFD5'>
<h2>Вход</h2>
<form name="enter">
<table>
 <tr>
  <td>Имя</td><td><input type='text' name='log'></td>
  <td rowspan='2'><div id='inval' style="display:none;"></div></td>
 </tr>
<tr>
 <td>Пароль</td>
 <td><input type='password' name='pass'></td>
</tr>
<tr><td><button onclick='init()'>Войти</button></td></tr>
</table>
</form>
</body>

PM MAIL   Вверх
vasac
Дата 12.8.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



Цитата

GET-запрос почему-то передается самой странице с формой, хотя  никто не просит этого делать. То есть при щелчке по кнопке в строке браузера появляется такой URL: ...../Enter.php?log=rtr45&pass=trfgf

Почему-то, почему...
А потому что форма отправляется и страница перезагружается... На чем основано убежденность в том, что сценарий попадает в req.readyState == 4?
PM WWW   Вверх
S.A.P.
Дата 12.8.2006, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 8
Всего: 71



Цитата(check @  12.8.2006,  21:54 Найти цитируемый пост)
Ошибка происходит где-то на стадии проверки статуса, в условие if (req.readyState == 4) я попадаю, а вот в if (req.status == 200) уже нет.

Вероятно сервер вернул 404. проверь еще раз url. И я подозреваю, что проблема в том, что ты пытаешься отправить запрос на отностиельный url.

PS: в GET запросах нужно еще избавляться от кеширования.
PM MAIL   Вверх
check
Дата 12.8.2006, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: нет
Всего: 23



Цитата(vasac @  12.8.2006,  22:27 Найти цитируемый пост)
потому что форма отправляется и страница перезагружается...
Да, действительно. Я добавил в onclick  
return false; и всё заработало.
Цитата(vasac @  12.8.2006,  22:27 Найти цитируемый пост)
На чем основано убежденность в том, что сценарий попадает в req.readyState == 4? 
Проверял алертом, как ни странно он выводился.

Цитата(S.A.P. @  12.8.2006,  22:33 Найти цитируемый пост)
в GET запросах нужно еще избавляться от кеширования
В смысле unset($_GET) в php-скрипте?

PM MAIL   Вверх
Sardar
Дата 13.8.2006, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(check @  12.8.2006,  20:54 Найти цитируемый пост)
Ошибка происходит где-то на стадии проверки статуса, в условие if (req.readyState == 4) я попадаю, а вот в if (req.status == 200) уже нет.

Это проблема большинства аяксовых скриптов, проверяеться только OK код, всё остальное игнорируеться; в итоге при малейшей ошибке система в лучшем случае просто "ничего не делает" smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0893 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.