我正在使用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中的小红点。
答案 0 :(得分:0)
出现该字符是因为您的某个php文件在打开php标记之前在换行符上有空格
只需检查你的模型或配置,找到额外的换行符或空格。
同样BOM character可以产生这样的结果。 PHP文件不应该包含任何BOM。如果您使用Windows记事本编辑文件,那么肯定是BOM。只需使用其中一个编辑器进行编程。
你问之前用Google搜索了吗? JSON response format error - red dot\bullet before response