CakePHP AJAX Json Parse使用Model时出错

时间:2014-08-31 00:59:45

标签: php jquery ajax json cakephp

我正在使用CakePHP 2.5.3.0开发一个应用程序,然后我偶然发现了AJAX的问题:

我正在使用从jQuery到CakePHP的AJAX请求来发送用户的登录名和密码,然后CakePHP应该返回一个经过验证的JSON响应。问题是:每当我在Controller中的action方法中使用Model方法时,JSON响应在JSON开始之前就会出现意外的字符。

以下是在Google Chrome上查看回复时的屏幕截图: http://i.imgur.com/m5x6X4G.png

jQuery AJAX请求代码在这里:

        $.ajax({
            url: "/login/signin.json",
            cache: false,
            type: "POST",
            dataType: "json",
            data: {
                email: $("#login-form").find("input[name=email]").val(),
                password: $("#login-form").find("input[name=password]").val()   
            },
            success: function(response) {               
                self.callback.login(response);
            }
        }); 

这是LoginController的“signin”方法:

        public function signin() {
        if(!$this->request->is("ajax"))     
            throw new BadRequestException();

        $this->layout = 'ajax';
        $this->response->disableCache();

        $this->RequestHandler->respondAs("application/json");

        if($this->request->is("post")):             
            $account = $this->Account->validateAccount($this->request->data['email'], Security::hash($this->request->data['password'],"sha1",true));

            if(count($account)>0):
                $account = $account['Account'];
                $message = array(   "success" => true,
                                    "message" => "[]");

                $AccountManager = new AccountSessionManager();
                $AccountManager->setId($account['id_account']);
            else:
                $message = array(   "error" => true,
                                    "message" => "The entered e-mail or password are invalid",
                                    "code" => 2 );
            endif;
        else:
            $message = array(   "error" => true,
                                "message" => "No POST request.",
                                "code" => 1 );
        endif;  

        $this->set("message", $message);
        $this->set("_serialize", array('message'));

        $this->render("ajax");
    }       

我在上面呈现的“ajax”的视图文件是一个简单的

<?php echo $message ?>

但是每当我改变这一行

$account = $this->Account->validateAccount($this->request->data['email'], Security::hash($this->request->data['password'],"sha1",true));

$account = array();

在json回应之前,我没有得到那个奇怪的角色。

我不知道为什么会发生这种情况,但当我在Controller中使用任何模型方法时,会发生 ...

顺便说一句,我从javascript获得的错误是:

  

未捕获的SyntaxError:意外的令牌

我正在谈论的意想不到的角色是在json之前Chrome中的小红点。

1 个答案:

答案 0 :(得分:0)

出现该字符是因为您的某个php文件在打开php标记之前在换行符上有空格

只需检查你的模型或配置,找到额外的换行符或空格。

同样BOM character可以产生这样的结果。 PHP文件不应该包含任何BOM。如果您使用Windows记事本编辑文件,那么肯定是BOM。只需使用其中一个编辑器进行编程。

你问之前用Google搜索了吗? JSON response format error - red dot\bullet before response