Ajax: странное поведение при проверке текстового поля - PullRequest
0 голосов
/ 23 мая 2010

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

альтернативный текст http://moismski.com/textfields.png

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

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

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);">';
}
?>

1 Ответ

0 голосов
/ 23 мая 2010

Во-первых, не видя ваш код 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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...