1

ログインシステムjQueryajaxとjsonを使用したいと思います。成功関数に問題はありません。「不正なログイン」などのカスタムエラーを処理する方法がわかりません。

これが私のコードです、助けてください。

<script>
    $(document).ready(function(){
        $("#login").click(function(){
            if($("#defaultEmail").val() == ""){
                $("#defaultEmail").addClass("field-err");
                $("#defaultEmail").focus();
            }else if($("#defaultPassword").val() == ""){
                $("#defaultEmail").removeClass("field-err");
                $("#defaultPassword").addClass("field-err");
                $("#defaultPassword").focus();
            }else{
                $("#defaultPassword").removeClass("field-err");
                $('#loading').css('display', 'block');
                var email = $('#defaultEmail').val();
                var password = $('#defaultPassword').val();
                var queryString = "email=" + email + "&password=" + password + "";
                $.ajax({
                  url: 'secureLogin.php',
                  contentType: "application/json; charset=utf-8",
                  dataType:'json',
                  async: false,
                  type:'GET',
                  data: queryString,
                  success: function(data){
                    $('#loading').css('display', 'none');
                    var url = "c_profile.php";
                    $(location).attr('href',url);
                  },
                  error: function(request,error){
                    $('#loading').css('display', 'block');
                    $("#log-ajax-error").append("ERROR: " + error);
                  }
                });
            }
        });
    });
</script>

これが私のsucureLogin.phpコードです

$email = $_GET['email'];
$password = $_GET['password'];
$encrypted_pass = md5($password);

    $sel = @mysql_query("SELECT `name`, `company`, `cid` FROM `company` WHERE `email` = '$email' AND `password` = '$encrypted_pass'");
    $count = @mysql_num_rows($sel);
    if($count > 0){
        while($data = @mysql_fetch_array($sel)){
                       // Success here
        }
    }else{
        $arr = array('a' => 'Unable to login');
        echo json_encode($arr);
    }

エラーに対してjson_encodeをスローしています。これを手伝ってください。前もって感謝します。

4

2 に答える 2

3

サーバー側

$arr = array('error' => 'Unable to login');
echo json_encode($arr);

クライアント側

success: function(data){
    $('#loading').hide(); 
    if( 'error' in data ){ 
        $("#log-ajax-error").append("ERROR: " + data.error);
    }
    else{
       var url = "c_profile.php";
       $(location).attr('href',url);
    }
},

ajaxリクエストでエラーが発生した場合、エラーコールバックが呼び出されるため、コードを成功ハンドラーに含める必要があります。

于 2012-10-01T13:36:52.110 に答える
1

ajaxでは、エラーハンドラはユーザーがスローしたエラーを構成するのではなく、接続エラー、またはリクエストのエラーを構成します。これは、あなたが持っているようなエラー応答をどのように返送しても、それは成功コールバックにヒットすることを意味します。

成功するには、応答を確認する必要があります。

成功:function(data){

   if(data.status === false)
   {{

      //エラーが発生しました

   } そうしないと {

      $('#loading')。css('display'、'none');
      var url = "c_profile.php";
      $(location).attr('href'、url);

   }

}、

そして、PHPハンドラーにステータスキーを追加します。

$ arr = array(
   'status' => true(またはfalse)、
   'a'=>'ログインできません'
);
于 2012-10-01T13:36:26.923 に答える