2013-07-05 30 views
1

我一直在尝试使用CakePHP 1.3实现ajax登录。我有一个简单的用户名/密码登录弹出。虽然json格式的回应是正确的,但Ajax json总是返回错误

以下是在我的意见/元件/ 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')); 

以下是在我的控制器控制器/ 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); 

} 

用于上述控制器的视图is under views/users/ajax_login.ctp只有这条线:

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

我阿贾克斯具有下面的代码:

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:"https://stackoverflow.com/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响应{ “成功”:真正}这是在正确的格式...但是...“responseText”我得到这样的东西:

responseText:“ { “成功”:真正}!< - 0.375s - > “

所以基本上即时猜测它的这种” < - 0.375s - >“这是造成JSON格式总是失败!我的阿贾克斯电话。我不知道这是CakePHP问题,还是AJAX/JSON问题!...我已经工作了超过5年,现在我的工作已经完成卡住!

回答

2

确实字符串<!-- 0.375s -->正在破坏你的代码。试着找出它来自哪里。一些步骤:

  1. 你使用什么布局来渲染它?在你的控制器中尝试debug($this->layout),看看它是哪一个。这可能很好,因为我没有看到你将布局设置为ajax。蛋糕有这个ajax布局,这本质上是一个空的布局。它在CakePHP 1.3中不应该包含任何超过echo $content_for_layout;的内容。
  2. 检查并确保你的“吐出”UTF-8编码。这是JSON必须的。
  3. 尝试用echo json_encode($response);替换当前视图代码或保留三方检查:echo isset($response) ? json_encode($response) : '';无论如何,JavaScriptHelper都会采用相同的方式。
  4. 这个“奇怪的字符串”可能是一些性能分析器的“渲染时间”评论。它从你的应用程序的某个地方来,你可以看到它是一个HTML注释。在Config/core.php降低您调试值 - 我猜测它是3

我猜测,检查布局,将其设置为ajaxempty将解决你的问题。

+1

Sabev先生,生活救星。此外,我真的很喜欢你剔除问题的方式。从上面我尝试了所有前3种方法。不幸的是,他们没有工作,因为我已经使用UTF-8,无论我喜不喜欢(阿拉伯文内容)。不过,多亏了你,我开始使用良好的练习(尤其是我开始使用'ajax'布局作为优秀练习),尽管这并没有解决它! ,但“樱桃在上面”它,#4是造成它的原因。在我的core.php我只是简单地改变了调试模式从Configure :: write('debug',3); Configure :: write('debug',0); poof!解决了! – Amjo

+1

@Amjo然后一定要接受答案,并upvote它。 ;) –

+0

对不起,我不能投票,但我批准了答案。声誉不会让我投票。 chherz :) – Amjo