Ajax: странное поведение при проверке текстового поля

У меня есть регистрационная форма с проверкой доступного имени для поля имени пользователя через ajax. Ввод имени пользователя в поле имени пользователя и нажатие кнопки «Проверить!» кнопку, скрипт отправляет значение в php-скрипт. Затем php-скрипт заменяет поле имени пользователя полем имени пользователя + стиль следующим образом:

http://moismski.com/textfields.png

Таким образом, при замене поля имени пользователя в форме его эквивалентом из php-скрипта, а затем отправке формы, на странице появляется скрипт, который проверяет, пусто ли поле имени пользователя или нет. И возвращает ошибку, что он пустой, хотя после проверки через ajax поле username имеет значение.

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

P.S. В IE браузер работает хорошо, но проверка в Firefox и Opera выдает ошибку!

Это такая форма, как пример:

<form method="post" action="check_form.php">
<div id="loadfield"><input type="text" name="username" value=""></div>
<input type="button" value="Check!" onclick="...script for sending username value to PHP script...">
<input type="submit" value="Submit a form">
</form>

Это скрипт, который проверяет наличие пустого поля после отправки формы:

<?
if(empty($_POST["username"])){
echo "<script>alert('Username field is empty!');</script>";
}
?>

Это скрипт, который AJAX отправляет имя пользователя для проверки перед отправкой:

<?
if(empty($_GET["username"])){
echo '<input type="text" name="username" value="'.$_GET["username"].'" style="border-width:1; border-color:red; border-style:solid; background-color:rgb(255,232,230);">';
}
?>

person ilnur777    schedule 23.05.2010    source источник
comment
Опубликуйте пример вашего кода, который может быть проще для нас, чем пытаться понять, что вы говорите... Код = ТВ, ваше письмо = радио, лол :) Радио позволяет вам использовать свое воображение и дает возможность использовать 100 сценариев, и мы может ошибаться :) поэтому опубликуйте пример кода.   -  person Val    schedule 23.05.2010
comment
Я обновил вопрос. Итак, почему замена одного текстового поля в форме на другое (с теми же именами) через ajax и отправка формы, php-скрипт не получает никакого значения такого текстового поля?   -  person ilnur777    schedule 23.05.2010


Ответы (1)


Во-первых, не видя вашего кода Javascript, трудно понять, что ваш скрипт делает с ответом, который он получает от HTTP-запроса. Я предполагаю, что здесь что-то идет не так.

Во-вторых... Я думаю, что, может быть, вы неправильно подходите к проблеме. То, что вы делаете, на самом деле вовсе не ajax. Разговор, который вы ведете, выглядит так:

js: Привет, пожалуйста, проверьте это имя пользователя для меня
php: хорошо, вот новое поле ввода, чтобы заменить старое.

Разговор должен быть:

js: Привет, пожалуйста, проверьте это имя пользователя для меня
php: Извините, это имя пользователя занято
js: хорошо, спасибо, я сообщу пользователю

Ваш php-скрипт должен возвращать файл XML, указывающий на доступность имени пользователя. Что-то вроде:

<?xml version="1.0" encoding="UTF-8"?>
<logincheck username="mylogin">
    <available>false</available>
</logincheck>

Затем ваш код javascript должен интерпретировать этот ответ и добавить классы в поле ввода (лучше, чем устанавливать встроенные стили) или отобразить любое другое сообщение, которое вы считаете подходящим.

Тогда вы на самом деле делаете ajax!

person Community    schedule 23.05.2010
comment
Я отправляю имя пользователя через XMLHttpRequest() методом GET в php-скрипт. Затем PHP проверяет имя пользователя var и формирует ответ, который ajax-скрипт возвращает, как html с innerHTML обратно. - person ilnur777; 23.05.2010