ajaxがどのように機能するかを理解することは私にとって本当に困難でした。これは主に、どういうわけか、PHPコードをoop構造で記述したためだと思います(私は初心者ですが、最初にphpを学び始めたときに読んだoopに関するこのphp本が原因で発生しました)。問題があるようです。 phpクラスファイル(その中の関数)をajax関数に接続します。
リアルタイムのユーザー名の可用性チェック機能をWebアプリケーションに追加しようとしています(Twitterのサインアップページに表示される機能のように)。
私は2つのファイルを持っています、register.php
そしてclass.register.php
ファイル内register.php
には、ファイルを起動するphpコード、class.register.php
htmlコード、および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から値を受け取っているとは思いません。
私を助けてください!私はしばらくの間この問題に苦しんでいます。よろしくお願いします!