jquery getJSON()从cakephp控制器响应为空,但是200成功

时间:2011-05-18 09:35:23

标签: jquery ajax validation cakephp

我可以从标准的http://传递我的错误,但我无法在我的jquery调用中获取$ errors值来渲染(甚至传递)。谁知道我在做错了什么?我已经在这里待了大约5个小时并且在我的脸上睡着了..感谢您的任何指导和批评。

我的jQuery:

$j("#applicant_age").focusin(function(){
    $j(this).css("background-color","#FFFFCC");
  });
  $j("#applicant_age").focusout(function(){
    $j(this).css("background-color","#ffffff");
    $j.getJSON('<?php echo $this->Html->url(array('controller'=>'plans', 'action'=>'ajax_search_validate'))?>', function(json){
    });
  });

控制器操作:

function ajax_search_validate() {
    if ($this->Plan->validates()) {
        $this->Plan->set($this->data);
        $errors = $this->Plan->invalidFields();
        $this->set('errors', $errors);
    }
}

查看(发布此内容可能毫无意义,但嘿......):

<?php
foreach ($errors as $error) :
?>

<p id="errorStyle" style="padding: 10px; background-color: #FF3333; color: #ffffff; margin:     0px 0px 10px 0px; "><?php echo $error; ?></p>

<?php endforeach; ?>

FireBug回复:

ResponseHeaders
Date    Wed, 18 May 2011 09:28:51 GMT
X-Powered-By    PHP/5.2.6-1+lenny10
P3P CP="N..."
Connection  Keep-Alive
Content-Length  0
Server  Apache/2.2.9 .....
Content-Type    text/html
Keep-Alive  timeout=15, max=100
RequestHeaders
Accept  application/json, text/javascript, */*; q=0.01
X-Requested-With    XMLHttpRequest

1 个答案:

答案 0 :(得分:1)

您要呈现的视图是HTML,因此您的$.getJSON调用会获取一堆HTML,而不是JSON。如果JSON未验证,则响应将显示为空,这就是您在$.getJSON呼叫中看不到任何内容的原因(尽管有200个成功响应)。试试这个:

$j.get('<?php echo $this->Html->url(array('controller'=>'plans', 'action'=>'ajax_search_validate'))?>', function(html){
    alert(html);
});

如果您确实希望将JSON返回给客户端,则需要修改控制器以返回一些。类似的东西:

echo json_encode(array('errors', $errors));

您可能必须禁用默认视图呈现行为(或创建JSON视图)。我对CakePHP并不熟悉,所以我无法真正了解如何实现这一目标。