2015-11-26 2 views
0

Привет, у меня есть код, который возвращает json-ответ в cakephp, он отлично работает в локальном хосте, но в процессе производства он не очень хорошо формирует ответ json для синтаксического анализа. , например, вот мой код действияJson array return in production with cakephp

public function deletepic(){ 
     ///configuration de l'ajax 
     $this->autoRender = false; 
     $this->request->allowMethod(array('ajax')); 
     $message = array('key'=>'hello'); 
     if($this->request->is(array('ajax'))){ 

      $picid = $this->request->data['id']; 
      $picname = $this->request->data['attachmentname']; 
      if($this->Profile->deleteAll(array('Pic.id'=>$picid,'Pic.attachment'=>$picname),false)){ 
       $message = array('info'=>'good'); 
      } 
      else{ 
       $message = array('info'=>'bad'); 
      } 
     } 
     $this->response->type = 'json'; 
     return json_encode($message, JSON_PRETTY_PRINT); 

    } 

и возвращает мне следующий ответ JSon:

{ 
    "info" 

я не знаю, что причиной этого problème, поскольку тот же код работает на локальной машине

+0

Это может фактически не имея надлежащих сведений. Ваша система в реальном времени может обрезать новые строки в журнале. Попробуйте распечатать 'json_encode ($ message)' –

+0

Что вы имеете в виду под лотком печати json_encode ($ message) ?? Должен ли я создать json вручную вместо использования json_encode ?? – user1655410

+0

Я имею в виду, что вы попробовали вернуться без «JSON_PRETTY_PRINT», например 'return json_encode ($ message)' –

ответ

1

CakePHP имеет встроенный класс JsonView. Вы можете сделать что-то вроде ниже.

В вашем/routes.php файле Config, добавьте следующую строку кода:

Router::parseExtensions('json'); 

и переопределяют код, как это:

public function deletepic(){ 
      ///configuration de l'ajax 
      $this->autoRender = false; 
      $this->request->allowMethod(array('ajax')); 
      $message = array('key'=>'hello'); 
      if($this->request->is(array('ajax'))){ 

       $picid = $this->request->data['id']; 
       $picname = $this->request->data['attachmentname']; 
       if($this->Profile->deleteAll(array('Pic.id'=>$picid,'Pic.attachment'=>$picname),false)){ 
        $message = array('info'=>'good'); 
       } 
       else{ 
        $message = array('info'=>'bad'); 
       } 
      } 
      $this->set('_serialize', $message); 

     } 

CakePHP будет автоматически переключаться просмотр классов, когда запрос выполняется с расширением .json или заголовком Accept является application/json.

Для получения дополнительной информации: http://book.cakephp.org/2.0/en/views/json-and-xml-views.html

+0

привет спасибо за ваш ответ, я использую теперь расширение json, но $ this-> set ('_ serialize', $ message); он возвращает пустой ответ не как старый – user1655410

+0

после использования расширения .json, он работал на рабочем сервере с этим кодом в конце $ this-> response-> body (json_encode ($ message, JSON_PRETTY_PRINT)); вместо _serialize, – user1655410

+0

при вызове ajax, вы также указали URL-адрес с расширением .json или нет? Если вы соблюдаете соглашение, ваш код должен быть хорошим. –