0

ajaxがどのように機能するかを理解することは私にとって本当に困難でした。これは主に、どういうわけか、PHPコードをoop構造で記述したためだと思います(私は初心者ですが、最初にphpを学び始めたときに読んだoopに関するこのphp本が原因で発生しました)。問題があるようです。 phpクラスファイル(その中の関数)をajax関数に接続します。

リアルタイムのユーザー名の可用性チェック機能をWebアプリケーションに追加しようとしています(Twitterのサインアップページに表示される機能のように)。

私は2つのファイルを持っています、register.phpそしてclass.register.php

ファイル内register.phpには、ファイルを起動するphpコード、class.register.phphtmlコード、およびajaxコードがあります(javascriptファイルはまだ分離されていません)。

ファイルのphp部分はregister.php次のようになります。

<?php
require_once 'class/class.register.php';
$register = new Register();
if(isset($_POST['picked_username'])){
    $register->ajax_username();
}
?>

ファイルのhtml部分はregister.php次のようになります。

<input type="text" name="username_input" id="username_input" value="" />
<span id="validate_username"></span>

ファイルのajax部分はregister.php次のようになります。

$("#username_input").keyup(function(){

    var picked_username = $("#username_input").val();
    $("#validate_username").text("loading…");

    $.ajax({
        type:"post",
        url:"register.php",
        data:{"picked_username":picked_username},
        success:function(result){
            if(result == "0"){
                $("#validate_username").text("available");
            }else if(result == "1"){
                $("#validate_username").text("not available");
            }
        },
        error:function(){
            $("#validate_username").text("something is wrong");
        }
    });
    return false;
});

したがって、基本的に、username_input領域に何かを入力すると、データが同じページ()に送信され、ページの上部でphpコードがregister.phpトリガーされ、ファイル内の関数が呼び出されます。isset($_POST['picked_username'])ajax_username();class.register.php

そしてこれはファイル内のajax_username();関数です(PDOを使用)。class.register.php

public function ajax_username(){
    $picked_username = $_POST['picked_username'];

    $query = "SELECT username FROM mytable WHERE username = '$picked_username' LIMIT 1";
    $result = $this->db->query($query);
    $number = $result->rowCount();

    if($number == 0){
        echo '0';
    }elseif($number == 1){
        echo '1';
    }
}

そして残念ながら、何も起こりません。誰かが問題が何であるか教えてもらえますか?

SELECTの代わりにUPDATEまたはINSERTクエリを実行すると、実際には正常に機能します。たとえば、非常によく似たコードを使用して、データベースのチェックボックス値をajaxで更新しました。

public function update_checkbox(){
    $check_box = $_POST['check_box'];
    $query = "UPDATE mytable SET checkbox = '$check_box' WHERE id = $myid LIMIT 1";
    $result = $this->db->query($query);
}

このコードは何もエコーしないので機能すると思います。そして、私のajaxコードがechoから値を受け取っているとは思いません。

私を助けてください!私はしばらくの間この問題に苦しんでいます。よろしくお願いします!

4

2 に答える 2

1

あなたのコードを見ることによって、私はajax_username()関数で1つのことを指摘することができます

if($number == 0){
        echo '0';
    }elseif($number == 1){
        echo '1';
    }

数値が0でも1でもない場合はどうなりますか?NULLを$result->rowCount()返すため、$numberはNULLだと思います。このケースは含まれていません。代わりにこれを使用してください

if($number == 0){
        echo '0';
    }elseif($number == 1){
        echo '1';
    }
    else
    {
       echo '0'; //or any thing else
    }
于 2012-07-20T11:32:25.300 に答える
1

では、返されるHTMLに関してあなたが言ったことを考えてみてください。あなたのコードはこれです...

<?php
require_once 'class/class.register.php';
$register = new Register();
if(isset($_POST['picked_username'])){
    $register->ajax_username();
}
?>

問題(または少なくとも一部)は、$register->ajax_username();呼び出された後です。HTMLページの残りの部分が呼び出されていると思います。exit()追加のコードが実行されないようにするためにを使用する必要があります。これを試して

if($number == 0){
    exit('0');
}else{
    exit('1');
}

また、rupesh-patelのポイントを見ることができます。上記はおそらくよりエレガントな解決策です。(0以外の値を実際にチェックする必要はありません)。

于 2012-07-20T13:55:11.750 に答える