1

我是一个很长一段时间的潜伏者,这是我的第一篇文章,所以对我来说放轻松......

所以我对 Javascript 还很陌生,我最终会使用 jQuery,但现在我坚持使用常规的 Javascript。

我已经用 PHP 创建了一个网站,现在我正在尝试设置一些客户端验证。

因此,在对这些论坛进行了一些研究之后,我发现获取 responseText 并不容易,因为它是异步的。所以我研究了回调,但我在设置它们时遇到了很多麻烦。我已经设法设置它,但它不断返回整个 html 页面,而不仅仅是回显的字符串。

function checkName(usernameString, callback) {

//
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
 xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}


xmlhttp.open("GET","checkName.php?q="+usernameString,true);
xmlhttp.onreadystatechange=function()
{

    if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//document.getElementById("uMess").innerHTML=xmlhttp.responseText;

    callback(xmlhttp.responseText);


   }
}
//xmlhttp.open("GET","checkName.php?q="+usernameString,true);
xmlhttp.send();



} 



function validateUsername(usernameString) {
 var valid = true;
checkName(usernameString,function(err,response){
if (err) {
    alert('Error: ' + err);

} else {
    alert('Response: ' + response);
} 
});
.....

有人介意指出我要去哪里灾难性的错误吗?在此先感谢各位:)

另外这里是检查用户名是否被使用的PHP文件

<?php
    include_once 'header.php';


    $userName = $_GET['q'];

    if ( strlen($userName) < 6 ){

   $response = "Too Short!";
   echo $response;
    }

    else{
    $query = "SELECT user FROM temporaryusers WHERE user='$userName'";
   $result = mysql_query($query);
   if(mysql_num_rows($result))
   {
    $response="Taken";
     echo $response;
   }
   else{
   $response="Available";
   echo $response;
   }
   }
   ?>
4

1 回答 1

2

你打电话给你的回调:

callback(xmlhttp.responseText);
         ^^^^^^^^^^^^^^^^^^^^--- one parameter

但函数定义为

checkName(usernameString,function(err,response){
                                  ^^^^^^^^^^^--- two params

所以你的 responsetext 实际上是进入err变量。您只是从 PHP 脚本传回一个字符串,所以err总是要设置为真。

于 2012-12-04T21:52:14.350 回答