Tôi đang cố gắng gửi yêu cầu ajax từ tệp javascript đến bộ điều khiển cakephp. Ajax đang gửi một đối tượng json đơn giản (tôi đã mã hóa nó trong ví dụ này để đơn giản).CakePHP 3: Phản hồi Ajax trả lại mã phản hồi 200 và một trình phân tích cú pháp
Khi tôi đăng nhập, máy chủ có thể giải mã chuỗi json thành đối tượng. Chức năng $this->Votes->delete
được gọi thành công. Vấn đề của tôi là tất cả mọi thứ hoạt động như nó cần, ngoại trừ tôi vẫn nhận được một thông báo lỗi anyways.
Dưới đây là mã của tôi và bên dưới là kết quả đầu ra mà tôi nhận được từ đó.
Javascript:
function unvote() {
$.ajax({
type: 'POST',
url: '../votes/unvote',
async: false,
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify({'post_id':1}),
success: function(data, textStatus, jqXHR){
console.log(data);
console.log(textStatus);
console.log(jqXHR);
}.
error: function(jqXHR, textStatus, errorThrown){
// this block gets triggered with a 200 response
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown);
},
});
}
PHP: Votes khiển
public function unvote(){
$this->autoRender = false;
$vote = $this->Votes->newEntity();
if ($this->request->is('ajax')) {
$data = $this->request->input('json_decode');
$vote = // get the correct vote from the database and save into this object
if ($this->Votes->delete($vote)) {
$this->response->body('Success');
$this->response->statusCode(200);
} else {
$this->response->body('Failure');
$this->response->statusCode(500);
}
}
$this->response->type('json');
return $this->response;
}
ajax đáp ứng:
Object{ readyState=4, responseText="", status=200, statusText="Ok", more...}
parsererror
SyntaxError:JSON.parse: unexpected end of data at line 1 column 1 of the JSON data
> return window.JSON.parse(data + "");
Bạn đã gửi đúng 'tiêu đề (" Content-Type: application/json ", true);' và tại sao bạn làm 'window.JSON.parse'? Bởi vì bạn đang mong đợi thông qua dữ liệu 'dataType: 'json'' json, do đó, nó sẽ được phân tích cú pháp là jquery, bạn không phải phân tích nó một mình. – JustOnUnderMillions
Tôi cho rằng phản hồi của bạn không hợp lệ, hãy kiểm tra nhật ký yêu cầu qua F12 trong Trình duyệt (Developer Console -> tab mạng) – JustOnUnderMillions
'status = 200' phải thực hiện với cuộc gọi http, không phải chính dữ liệu đã cho. Trạng thái 200 có nghĩa là ở đây: Nội dung nào đó đã được gửi chính xác. Chỉ có bấy nhiêu thôi. Điều đó không nói gì về nội dung được gửi đi. – JustOnUnderMillions