cakephp 2.2 получает данные json в контроллере

Я пытаюсь отправить данные JSON с веб-страницы с помощью JQuery, например:

$.ajax({
    type: "post",       // Request method: post, get
    url: "http://localhost/ajax/login",
    data: '{username: "wiiNinja", password: "isAnub"}',
    dataType: "json",   // Expected response type
    contentType: "application/json",
    cache: false,
    success: function(response, status) {
        alert ("Success");
    },
    error: function(response, status) {
        alert('Error! response=' + response + " status=" + status);
    }
});

В Cake2.2 у меня есть контроллер с именем Ajax, у которого есть метод с именем «login», например:

public function login($id = null)
{
    if ($this->RequestHandler->isAjax())
    {
        $this->layout = 'ajax'; // Or $this->RequestHandler->ajaxLayout, Only use for HTML
        $this->autoLayout = false;
        $this->autoRender = false;

        $response = array('success' => false);

        $data = $this->request->input(); // MY QUESTION IS WITH THIS LINE
        debug($data, $showHTML = false, $showFrom = true);
    }
    return;
}

Я просто хочу посмотреть, правильно ли я передаю данные контроллеру. Если я использую эту строку:

$data = $this->request->input();

Я вижу отладочную распечатку:

{username: "wiiNinja", password: "isCool"}

Я читал в руководстве CakePHP 2.x, в разделе «Доступ к данным XML или JSON», он предлагает этот вызов для декодирования данных :

$data = $this->request->input('json_decode');

. Когда я отлаживаю печать $data, я получаю «ноль». Что я делаю не так? Мои данные, переданные из Javascript, неверны? Или я неправильно вызываю декодирование?

Спасибо за любое предложение.

============= Мое собственное редактирование ========

Нашел свою ошибку путем экспериментов:

При публикации через Javascript вместо этой строки:

data: '{username: "wiiNinja", password: "isAnub"}',

Измените его на:

data: '{"username": "wiiNinja", "password": "isAnub"}',

И

В коде контроллера измените эту строку:

$data = $this->request->input('json_decode');

К:

$data = $this->request->input('json_decode', 'true');

Оно работает.


Данхамзз,

Когда я последовал вашим предложениям и изучил массив «$ this -> request -> params» в коде моего контроллера, он содержит следующее:

array(
    'plugin' => null,
    'controller' => 'ajax',
    'action' => 'login',
    'named' => array(),
    'pass' => array(),
    'isAjax' => true
)

Как вы видете,данных, которые я ищу, там нет. У меня уже есть правильный код маршрута. Это согласуется с тем, что говорится в документации для 2.x здесь:

http://book.cakephp.org/2.0/en/controllers/request-response.html

До сих пор единственный способ заставить его работать, как указано выше в «Моем собственном редактировании». Но если отправлять строку JSON на сервер неправильно, я хотел бы это исправить, потому что в конечном итоге мне придется обрабатывать сторонний код, который будет отправлять объекты JSon.

8
задан Kev 12 July 2012 в 23:12
поделиться