/ Funkcja powodzenia / Ajax nie uruchomi się nawet po pomyślnym wywołaniu - jquery, ajax, cakephp

Funkcja sukcesu Ajax nie uruchomi się nawet wtedy, gdy połączenie się powiedzie - jquery, ajax, cakephp

Używam ajax do zapisywania danych w aplikacji cakephp. Aneks działa w zakresie, w jakim zapisuje dane - kiedy klikam przycisk Prześlij, komentarz zapisuje się w bazie danych, a nawet automatycznie pojawia się na mojej liście komentarzy. Jednak bez względu na to, czego próbuję, w funkcji „sukces” nic się nie dzieje. Nie mogę otrzymać ostrzeżenia, ale nie mogę też otrzymać ostrzeżenia o błędzie.

Co się dzieje? Czy to ma coś wspólnego z tym, jak Cake zwraca dane? W funkcji dodawania mojego kontrolera działa część zapisująca. Część, która sprawdza, czy żądanie jest ajax, wydaje się nic nie robić. Próbowałem umieścić tam przekierowanie, a strona nie przekierowuje. Żeby było jasne: nie chcę, aby strona została przekierowana, chcę pozostać na stronie. Ponieważ jednak nie mogę nic zrobić po sukcesie, nie mogę wyświetlić komunikatu „zapisanego” ani wyczyścić pól formularza czy coś jeszcze. Pomysły?

// my jquery script
$(document).ready(function () {
// Turn submit button into an ajax call
$("#save-comment input").click(function(){
saveComment();
});

// This function is called when the "save" button is clicked
function saveComment()
{
var formdata = $("#comment-form").serialize();
$.ajax({
type: "POST",
url: "/cakeblog/comments/add",
data: formdata,
success: function(result) {
alert("success");
},
error:function (){
alert("error");
}
});
}
});

// my controller
class CommentsController extends AppController {
public $name = "Comments";

public function add() {
if (!empty($this->data)) {
if($this->Comment->save($this->data)){
if($this->request->is("ajax")){
// nothing I put here seems to do anything
$this->redirect(array("action"=>"index"));
} else {
$this->Session->setFlash("Message sent");
$this->redirect(array("action"=>"index"));
}
}
}
}
}

Odpowiedzi:

0 dla odpowiedzi № 1

Kod wygląda poprawnie. Niektóre wskazówki:

  1. Sprawdź konsolę JavaScript pod kątem błędów?
  2. Sprawdź widok sieciowy przeglądarki: co serwer wysyła jako odpowiedź na to wywołanie AJAX? Czy w ogóle reaguje?

0 dla odpowiedzi nr 2

Nie zwróciłeś odpowiedzi HTTP w kontrolerze. Musisz wrócić Http Response w function add() . W tym celu musisz echo w twoim kontrolerze.

Wygląda na to, że wykrywanie Ajax jest złe ... użyj poniżej, aby wykryć Ajax.

$this->set("isAjax", $this->RequestHandler->isAjax());

I jeszcze jedno. przekierowujesz w swoim kontrolerze. u nie można przekierować w tym widoku. Musisz to zrobić w pomyślnym wywołaniu twojego Ajax.