Tôi đang cố gắng để gửi dữ liệu JSON từ một trang web sử dụng JQuery, như thế này:cakephp 2.2 lấy dữ liệu json trong điều khiển
$.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);
}
});
Trong cake2.2, tôi có một bộ điều khiển tên Ajax mà có một phương pháp có tên "đăng nhập", như sau:
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;
}
Tôi chỉ muốn xem liệu tôi có chuyển đúng dữ liệu đến bộ điều khiển hay không. Nếu tôi sử dụng dòng này:
$data = $this->request->input();
tôi có thể thấy debug in:
{username: "wiiNinja", password: "isCool"}
Tôi đọc trong cuốn hướng dẫn 2.x CakePHP, dưới "Truy cập XML hoặc dữ liệu JSON", nó cho thấy cuộc gọi này để giải mã dữ liệu:
$data = $this->request->input('json_decode');
Khi tôi gỡ lỗi in $ data, tôi nhận được "null". Tôi đang làm gì sai? Dữ liệu của tôi có được truyền từ Javascript không chính xác không? Hay tôi không gọi giải mã chính xác?
Cảm ơn mọi đề xuất.
============= Sửa My own ========
Tìm thấy sai lầm của mình thông qua các thí nghiệm:
Khi đăng thông qua Javascript, thay vì dòng này:
data: '{username: "wiiNinja", password: "isAnub"}',
Thay đổi nó để:
data: '{"username": "wiiNinja", "password": "isAnub"}',
VÀ
Trong các mã điều khiển, thay đổi dòng này:
$data = $this->request->input('json_decode');
Để:
$data = $this->request->input('json_decode', 'true');
Nó hoạt động.
Dunhamzzz,
Khi tôi đi theo đề xuất của bạn, kiểm tra việc "$ this-> request-> params" mảng trong mã điều khiển của tôi, nó có chứa những điều sau đây:
array(
'plugin' => null,
'controller' => 'ajax',
'action' => 'login',
'named' => array(),
'pass' => array(),
'isAjax' => true
)
Như bạn có thể thấy, dữ liệu mà tôi đang tìm kiếm không có ở đó. Tôi đã có mã tuyến thích hợp. Điều này phù hợp với những gì tài liệu cho 2.x nói ở đây:
http://book.cakephp.org/2.0/en/controllers/request-response.html
Cho đến nay, cách duy nhất mà tôi tìm thấy để làm cho nó hoạt động, là như đã nêu ở trên trong "Edit riêng của tôi". Nhưng nếu việc gửi một chuỗi JSon đến máy chủ không phải là điều đúng, tôi muốn sửa lỗi này, bởi vì cuối cùng, tôi sẽ phải xử lý mã của bên thứ ba sẽ gửi các đối tượng JSon.