1

私は長い間潜んでいて、これが私の最初の投稿なので、気楽に行ってください...

私は Javascript にかなり慣れていないので、最終的には jQuery に取り掛かるつもりですが、今のところは通常の Javascript に固執しています。

PHP で Web サイトを作成しましたが、クライアント側の検証をセットアップしようとしています。

したがって、これらのフォーラムを少し調べたところ、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

したがって、応答テキストは実際にerr変数に入ります。PHPスクリプトから文字列を返すだけなので、err常に設定され、trueになります。

于 2012-12-04T21:52:14.350 に答える