Próbuję wysłać żądanie ajax z pliku javascript do kontrolera cakephp. Ajax wysyła prosty obiekt JSON (w tym przykładzie zostałem zakodowany na stałe w prostocie).CakePHP 3: Odpowiedź Ajax zwraca kod odpowiedzi 200 i parsererror
Podczas rejestrowania serwer może dekodować ciąg jsonów w obiekcie. Funkcja $this->Votes->delete
jest wywoływana pomyślnie. Mój problem polega na tym, że wszystko działa tak, jak powinno, ale i tak nadal otrzymuję komunikat o błędzie.
Poniżej znajduje się mój kod, a poniżej jest wynik, który otrzymuję z niego.
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: Głosy Controller
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 odpowiedzi:
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 + "");
Czy wysłałeś poprawny 'header (" Content-Type: application/json ", true);' i dlaczego robisz 'window.JSON.parse'? Ponieważ spodziewasz się za pośrednictwem danych 'dataType: 'json'' json, więc zostanie on sparsowany jako jquery, nie musisz sam go analizować. – JustOnUnderMillions
Coś twoja odpowiedź jest nieważna, sprawdź log żądania przez F12 w przeglądarce (Developer Console -> karta sieciowa) – JustOnUnderMillions
'status = 200' ma do czynienia z wywołaniem http, a nie dane dane. Status 200 oznacza tutaj: Coś zostało wysłane poprawnie. Nic więcej. To nie mówi nic o treści, która została wysłana. – JustOnUnderMillions