Ajax:检查文本字段时的奇怪行为

时间:2010-05-23 10:07:17

标签: php ajax textfield

我有一个注册表单,通过ajax检查用户名字段的可用名称。在用户名字段中输入用户名并按“检查!”按钮,脚本将值发送到php脚本。然后PHP脚本将用户名字段+样式替换为用户名字段,如下所示:

alt text 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 :(得分:0)

首先,在没有看到您的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!