Ajax json总是返回错误,尽管响应中的json格式是正确的

时间:2013-07-05 00:13:26

标签: ajax json cakephp-1.3 croogo

我一直在尝试使用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年多,现在我卡住!

1 个答案:

答案 0 :(得分:2)

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

  1. 您使用什么布局来渲染它?在Controleler中尝试debug($this->layout),看看它是哪个。这可能就在那里,因为我没有看到你将布局设置为ajax。 Cake有这个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。
  5. 我猜测检查布局并将其设置为ajaxempty可以解决您的问题。