Невозможно правильно прочитать закодированные в json состояния успеха / отказа, отправленные функцией контроллера PHP Cake, обрабатывающей вызов Ajax - PullRequest
1 голос
/ 24 июня 2011

Моя проблема в чем-то похожа на cakephp, jquery, .ajax (), dataType: json , но мои наблюдения немного отличаются.

Я работаю над проектом Cake PHP.Рассмотрим подмодуль group_assoc модуля opstools.Итак, внутри opstools_controller.php есть эта функция group_assoc(), которая вызывается с помощью вызова ajax для обновления ассоциаций групп.

Мой пост Ajax выглядит так -

$.post( url,
function(data) 
{
   if(data)
   {

      alert(data.success);  //alerts -> undefined
      alert(data);          //alerts -> {"success":true}  or {"success":false}

      if(data.success)
      {
         //does not work
      }
  }

}, "json");

И внутри opstools_controller.php У меня есть -

function group_assoc()
{
     ...
     ...
     //some code
     ...
     ...
     $success //contains true or false - depending on previous logic

     echo json_encode(array("success" => $success));
}

Итак, внутри функции обработчика ответа Ajax (вчасть публикации ajax), я получаю строку вроде {"success":false}.

Как мне решить эту проблему.Я помню, как использовал аналогичные сообщения Ajax и отвечал с помощью json_encode, который прекрасно работал в предыдущем проекте с Core PHP (без Cake PHP).В чем может быть проблема здесь?Есть указатели?

Обновление
Нужно ли явно устанавливать какой-либо заголовок?Зачем это нужно?Где проверить, установлено ли, что мы возвращаем текст.Я попытался поместить header("HTTP/1.1 200 OK"); перед эхо-частью, как это делается в существующем коде - аналогичные функции обработчика Ajax.

Кроме того, я установил $this->autoRender = false; в своем модуле.

Ответы [ 2 ]

2 голосов
/ 24 июня 2011

Убедитесь, что вы отправляете правильный тип заголовка

header('Content-type: application/json');

Либо вы можете использовать метод jQuery getJSON () для обработки JSON

1 голос
/ 25 июня 2011

Мне кажется, что вы можете пропустить аргумент для $.post() API:

.post( url, [data,] [success(data, textStatus, jqXHR),] [dataType] )

В частности, аргумент data. Пример API, кажется, указывает на то, что он достаточно умен, чтобы выяснить, когда он отсутствует (аргумент не появляется в примере API), но, возможно, стоит добавить его явно:

$.post( url, null,
  function(data) 
  {
    if(data)
    {

       alert(data.success);  //alerts -> undefined
       alert(data);          //alerts -> {"success":true}  or {"success":false}

    if(data.success)
    {
      //does not work
    }
  }

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