Ответ jquery getJSON () пустой от контроллера cakephp, но успех 200 - PullRequest
2 голосов
/ 18 мая 2011

Я могу передать свои ошибки из стандартного http://,, но не могу получить значения $ errors для отображения (или даже передачи) в моем вызове jquery. Кто-нибудь знает, что я здесь делаю не так? Я занимался этим около 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 Ответ

1 голос
/ 18 мая 2011

Представление, которое вы отображаете, является 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, поэтому я не могу вдаваться в подробности того, как этого можно достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...