1

CakePHP 1.3 で ajax ログインを実装しようとしています。シンプルなユーザー名/パス ログインのポップアップが表示されます。

以下は私のviews/elements/login.ctpにあります:

echo $this->Form->create('User', array('url'=>array('controller'=>'users','action'=>'login'), 'id'=>'user_login'));
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end('Login'));

以下は私のコントローラーにありますcontrollers/users_controller.php

public function ajax_login() {

    $response = array('success'=>false);

      if($this->RequestHandler->isPost()) {
         if($this->Auth->login()) {
            $response = array('success'=>"true");
         } else {
            $response = array('success'=>false);
         }
      }
        $this->set('response', $response);

}

上記のコントローラーのビューは、views/users/ajax_login.ctpの下にあります。次の行のみがあります。

echo $javascript->object(isset($response) ? $response : array());

私のAjaxには次のコードがあります:

function login_user(){

    var username = $("#UserUsername").val();
    var password = $("#UserPassword").val();

    if(username == "" || username == null || password == "" || password == null){
        alert("Please enter a username and password");
        return false;
    }

    $.ajax({
        url:"/users/ajax_login",
        type:"POST", 
        data:$('#user_login').serialize(), 
        dataType:"json",
        async: true,
    success: function() { console.log("success"); }, 
    error: function(msg) { console.log(msg); }
    });

    return false;
}

現在、すべてが完全に機能しているように見えますが、これは常に「エラー」コールバックに失敗しており、その理由はわかりません。以下のスタックオーバーフローのリンクをすべて読みましたが、どれも問題ではないようです!

JSON が有効な ときに $.ajax の不正な形式の JSON を介して json ファイルを要求すると、奇妙な JSON の動作が発生しますか? struts2 json_encode で Ajax エラーが発生し 、不正な形式の JSON (余分な隠し文字を含む) が作成 される

私が疑う唯一のことconsole.log(msg)は、エラーを読んだときに、正しい形式の正しい HTML 応答{"success":true}を取得することです...しかし... "responseText" は次のようなものを取得します。

responseText: "{"success":true}<!-- 0.375s -->"

したがって、基本的には、この「<!-- 0.375s -->」が原因で、ajax 呼び出しで json 形式が常に失敗すると推測しています。いったいどうやってこれを取り除くのですか?!... これが CakePHP の問題なのか、それとも AJAX/JSON の問題なのか、もはやわかりません!... 私は両方に 5 年以上取り組んできましたが、今は立ち往生!

4

1 に答える 1