2011-10-27 8 views
0

は、私は、ユーザーとのこの非常に単純なログインフォームを持っているし、合格動作していないと私は両方がデータベースにあることを確認する必要があると私はこのために、AJAXを使用しています:ログイン内部のjQueryのAjaxのテキスト入力欄の機能は

$("#clientes").bind("submit", function() { 
    $(".error_usu").hide(); 
    $.ajax({ 
     type  : "POST", 
     cache  : false, 
     url   : "login.php", 
     data  : $(this).serializeArray(), 
     success: function(data) { 
      switch(data){ 
       case '1'://exito 
        alert("alert!"); 
        window.location.href = "clientes.php"; 
       break; 
       case '2'://pass 
        $(".error_pass").show(); 
       break; 
      } 
     } 
    }); 

    return false; 
});  

。 PHPは、私はこれを持っている:私は放火犯をチェックすると

<? session_start(); 
if(!empty($_POST['usuario']) && !empty($_POST['password'])) 
{ 
include "funciones.php"; 
$username = $_POST['usuario']; 
    $password = $_POST['password']; 
$con=conectar(); 
$checklogin = mysql_query("SELECT * FROM clientes WHERE user = '".$username."' AND pass = '".$password."'",$con) or die (mysql_error()); 

if(mysql_num_rows($checklogin) == 1){ 
    $_SESSION['usuario'] = $_POST['usuario']; 
    $_SESSION['password'] = $_POST['password']; 
    echo '1'; 
}else{ 
    echo '2'; 
} 

}else{ 
    echo '2'; 
}?> 

私は1つのまたは2が、デ成功機能が働いされることはありません取得しています参照してください!私はちょうどlogin.phpの内側にこの方法をチェックし、データベースを持っていた前に、私はこれを試してみました、それが働いた:

if($_POST['usuario']=="fulano" && $_POST['password']=="fulano"){ 
    echo '1'; 
} 

は、それが原因で$ _SESSION変数の働きませんか?私は完全にajax関数の仕組みを理解していません。

+0

$アヤックスコールパラメータデータ型に追加します。「HTML」と、あなたはそれを –

+1

を持っていますあなたの成功の関数が呼び出されていない、またはcase文に足を踏み入れるませんか?試してみましょう。成功:function(data){alert(data); }}、ちょうど関数が呼び出されていることを確認し、データがあなたの期待どおりであることを確認してください(つまり、空白、ヘッダー情報、HTMLコードなどは含まれません) – Connell

+0

Connellは正しいです、ファイヤーバグは私に1または2を示します:SIはデータ型を試しても動作しません –

答えて

3

switch文を入力していない場合は、レスポンスに1を掛けることができます。JavaScriptでは、テキストではなく数値になります。

success: function(data) { 
     data *= 1; 
     switch(data){ 

または

success: function(data) { 
     data = parseInt(data); 
     switch(data){ 
+0

これは本当に何が起こっていたのか本当に知りたいここに?なぜデータ型は機能しませんでしたか? –

+0

@ Glenn85:それは知っている良いトリックです!しかし、私はElaineがそれを整数として扱う方法を見つけて、コードを訪れる次の人が理解しやすくなると思うと思います。あなたはそうは思わない? – pencilCake

+1

応答はテキスト形式ですが、switch文は数字のみで動作します。 "データ* = 1;" statement JavaScriptはレスポンスをnumberとして扱います。 – Glenn85

2

正しいデータ型を指定してみましたか?例えば

error:  function(err){alert("Errror:"+err.toString());}, 

をし、それがエラーを返し、エラー文字列が何であるかyesの場合どうかを確認:

type:  "POST", 
    dataType: "text", 

ちょうどあなたが追加することができます確認します。

はまた、あなたの成功の方法がヒットした場合には、このを試すことができます:

success: function(data) {alert(data==1); alert(data=='1'); } 
+0

エラーメッセージは表示されません。私はコネナーが言ったことをしたときに警報を鳴らしました。 –

+0

返されたVauleが文字列 '1'であるか、整数1であると言っているのでしょうか?その理由が考えられます。 – pencilCake

+0

私の質問では、login.phpファイルの中にあるように、私はecho '1'を返します。私はswitch(data){case '1':...}を使ってスイッチでそれを捕まえようとしますが、それは何らかの理由で動作しませんでした。データ* = 1を行う;トリックは、スイッチをケース1に変更した後に動作させました: –

2

あなたはAJAX呼び出しでエラーハンドラを実装することで応答を捕獲しようとすることができます。また、受け取る予定のデータ型を設定することもできます。

en$.ajax({ 
    type  : "POST", 
    cache  : false, 
    url   : "login.php", 
    data  : $(this).serializeArray(), 
    dataType : "text", 
    error  : function(jqXHR, textStatus, errorThrown) { 
     //Look at the values of jqXHR, textStatus, errorThrown 
    }, 
    success: function(data) { 
     switch(data){ 
      case '1'://exito 
       alert("alert!"); 
       window.location.href = "clientes.php"; 
      break; 
      case '2'://pass 
       $(".error_pass").show(); 
      break; 
     } 
    } 
}); 
+0

まだ何も表示されず、エラーが表示されません –

関連する問題