2012-02-16 7 views
0

私はjQuery ajaxデータベースクエリを持っています。私は多分それをより柔軟にする方法を考えています。もし誰かがより良いアプローチに光を当てることができたら、私はちょうどajaxを学び始めて少し助言が必要です。jQueryデータベースのajaxリクエストを効率的かつ柔軟にする方法を教えてください。

相続人は、私がこれまでしている:

 <form method="post" name="sc_ajax" onsubmit="checkDB(document.sc_ajax.sc_voucher_code.value); return false;"> 
    ... 
     </form> 

フォームがそのように設定されていることは、それは(同じページ)以下のAJAX機能を実行します提出:

function checkDB(code) 
{ 

    $.ajax({ 
    type: "POST", 
    url: "<?php bloginfo('template_url'); ?>/profile/check_code.php", 
    data: 'code='+code, 
    datatype: "html", 
    success: function(result){ 

     if(result == 0) 
     { 
      $('#success').html(code + ' already exists and has not been redeemed...'); 
      // alert('success');//testing purposes 
     } 
     else if(result == 2) 
     { 
      $('#err').html( code + ' already exists and has already been redeemed....'); 
      //alert('fail');//testing purposes 
     }else if(result == 1){ 
      $('#err').html( code + ' redeem code doesnt exist');  
     } 

     alert(result);  
     } 
    }) 

} 

だから、これはAからもたらされます「check_code.php」と呼ばれる別々のファイル:

$code = mysql_real_escape_string($_POST['code']); 

$resultcode = mysql_query('select * from wp_scloyalty where code = "'. $code .'"') or die(mysql_error()); 


$redeemed=array(); 
while($info = mysql_fetch_array($resultcode)) 
{ 

    $redeemed[$info["code"]] = $info["redeemed"]; 

} 

if(mysql_num_rows($resultcode)>0 && $redeemed[$code] == 0){ 
    //Exists so change redeemed code to 1 
    echo 0; 

}elseif(mysql_num_rows($resultcode)>0 && $redeemed[$code] == 1){ 
    //Exists but already redeemed, so throw error 
    echo 2; 

}else{ 
    //Doesnt Exist 
    echo 1; 
} 

コードが途中で完璧に動作します...しかし、私の質問です...私は現在、check_code.phpファイルから "if文"の束を実行していますが、これを行うためのよりよい方法は、Ajaxや他の人々のアプローチを使用する際のヒントを探しているので、はるかに混乱しているようですコードが詰まっています。私はここで何か間違っていますか?

ありがとう!

答えて

2

クエリがゼロ行を返す場合、フェッチ配列はエラーを発生させるため、最初に行数を計算する必要があります。ご覧のとおり、結果配列を複数回取得しています。それをする必要はありません。結果配列を取得して後で比較するために、その配列を格納します。 あなたのajaxに関連して、スピードアップのためにjQueryでcache:trueを使用してください。

+0

返信いただきありがとうございます。あなたが言うことは理にかなって...ちょうど私が結果アレイを何回取っているのか疑問に思っていますか?ループ中にフェッチ配列がなければ、後でif文の$ reememed [$ code]にクエリ結果を追加できません...そうですか? – JamesG

+0

申し訳ありませんが、私は配列を取得しているわけではありませんでした。私はあなたがmysql_num_rowsに条件の2つの行数を返すよう要求していることを意味していました。それはmysqlの機能のため、mysqlサーバに連絡する必要があります。だから一度それを取得し、後でそれを使用してください。 – SachinGutte

+0

ああ、私はあなたが笑を意味するかを参照してください。おかげで... ...変わった! – JamesG

関連する問題