2014-09-28 6 views
1

Я пытающегося обновлять записи через декодированного JSON с помощью ID в этой функции CakePHP:Получение нуль с json_decode()

public function update() { 
    $this->layout = 'ajax'; 
    if($this->request->is('post')) { 
     $decoded = json_decode($this->request->data,true); 
     if($data = $this->Foobar->save($decoded)) { 
      $data = json_encode(array(
       "message" => "Foobar successfully updated.", 
       "update" => $this->request->data 
      )); 
     } else { 
      $data = json_encode(array(
       "message" => "Foobar could not be updated.", 
       "update" => $decoded, 
       "updateJson" => $this->request->data 
      )); 
     } 
    } else { 
     $data = json_encode(array(
      "message" => "Method should be post." 
     )); 
    } 
    $this->set('data', $data); 

Но расшифровывает постоянно возвращается null:

{"message":"Foobar could not be updated.","update":null,"updateJson":{"ID":"1","status":2}} 

Однако, если Я хожу в http://www.compileonline.com/execute_php_online.php и введите:

<html><head></head><body> 
<pre> 
<?php 
    print_r(json_decode('{"ID":"1","status":2}', true)); 
?> 
</pre> 
</body></html> 

Это прекрасно работает ...

Глядя на смежные вопросы ...

  • Я видел предложения попробовать json_last_error(), это возвращает 0 для меня.
  • Я видел, как кто-то упоминал, что magic_quotes может быть включен, мои отключены.
  • Я видел предложения использовать json_decode(utf8_encode($this->request->data),true);, это по-прежнему возвращает null для меня

Любые идеи?

+0

'$ this-> запрос-> data' делать var_dump на него и проверить, если его действительным JSON – mithunsatheesh

+0

Что такое URL вы вызываете его? расширение .json включено? – mark

+0

@mithunsatheesh, я предполагаю, что предположил, что когда я включил '' this this-> request-> data' в 'data', и он показывает действительные json' {"ID": "1", "status": 2} 'it означало бы, что это действительно json ... однако должно быть что-то, что происходит за кулисами, поскольку 'var_dump' показывает массив ...' array (2) { ["ID"] => string (1) "1" ["status"] => int (2) } ' – smerny

ответ

0

Я не думаю, что вы должны JSON Декодировать данные.

Попробуйте прямо сохранить:

$data = $this->Foobar->save($this->request->data); 
+0

Привет, см. Комментарии выше. Похоже, что это должно работать, поскольку я думаю, что JSON автоматически декодируется ... но кажется, что CakePHP пытается вставить, а не обновлять, даже если включен первичный ключ. – smerny

+0

Ну, во всяком случае, я полагаю, это на самом деле ответ на вопрос, почему он возвращает «null». – smerny