我一直在尝试使用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;
}
现在,一切似乎都运行得很好,但是,这总是失败进入“错误”回调,我不知道为什么。我已经阅读了stackoverflow上的所有以下链接,并且它们似乎都不是问题!
Weird JSON behavior when requesting a json file via $.ajax malformed JSON while JSON is valid? Ajax error result with struts2 json_encode creating a malformed JSON (with extra hidden character) php json_encode not returning proper json encoded string
我怀疑的唯一问题是当我阅读错误的console.log(msg)
时,我得到了正确的HTML响应 {“成功”:true} ,其格式正确...但是......“responseText”我得到了这样的东西:
responseText:“{”success“:true}<! - 0.375s - >”
所以基本上我猜这是“<! - 0.375s - >”这导致json格式在我的ajax调用中始终失败。我怎么摆脱这个?!...我不再确定这是一个CakePHP问题,还是AJAX / JSON问题!...我已经工作了5年多,现在我卡住!
答案 0 :(得分:2)
确实,字符串<!-- 0.375s -->
正在破坏您的代码。试着找出它的来源。一些步骤:
debug($this->layout)
,看看它是哪个。这可能就在那里,因为我没有看到你将布局设置为ajax
。 Cake有这个ajax
布局,基本上是一个空布局。它不应包含CakePHP 1.3中的echo $content_for_layout;
以外的任何内容。echo json_encode($response);
替换当前的观看代码,或者保持三边检查:echo isset($response) ? json_encode($response) : '';
无论如何,JavaScriptHelper都会做同样的事情。Config/core.php
中的调试值 - 我猜它是3。我猜测检查布局并将其设置为ajax
或empty
可以解决您的问题。