Я пытаюсь отправить данные 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.