CakePHP отменить перенаправление для просмотра после отправки действия добавления AJAX - PullRequest
1 голос
/ 16 августа 2010

Я пытаюсь отправить форму через AJAX и предотвратить перенаправление после отправки формы.Я не понимаю, почему у меня возникла эта проблема, поскольку я установил для autoRender значение false.

Код контроллера

 function add() {
    $this->autoRender = false;
    if (!empty($this->data)) {
        $this->data['Comment']['user_id'] = $this->Auth->user('id');
        $this->Comment->create();
        if ($this->Comment->save($this->data)) {
        }
    }
}

Обработчик событий JS

$(".submit_comment").live("submit",commentSubmitHandler);
function commentSubmitHandler(event){
$.ajax({
    type: "post",
    url: $("#webroot").val() + "comments/add",
    data: data,
    dataType: "json",
    success: function(data){
        alert("win");
    },
    error: function(data){
        alert("fail");
    }
});
return false;

}

Данные формы отправляются и сохраняются просто отлично, но какого чёрта она покидает страницу?Кроме того, кажется, что он делает это до завершения js, потому что предупреждения на самом деле никогда не отключаются.Поэтому существует прямое перенаправление прямо из действия контроллера «добавить».

Ответы [ 3 ]

3 голосов
/ 16 августа 2010

Попробуйте добавить ссылку на отправку js вне формы, чтобы проверить, работает ли отправка таким образом. Если это так, то вам может потребоваться изменить кнопку с type = "submit" на type = "button". Возможно, кнопка «отправить» фактически отправляет форму.

Альтернативой является проверка того, что тег <form> отправляется через js и не публикуется в функции add в контроллере.

Кроме того, убедитесь, что ничего не кэшируется (на всякий случай - я видел, как это происходит), очистив файлы кэша в tmp/cache/persistan t.

2 голосов
/ 10 декабря 2010

Попробуй поставить $this->autoRender = false;

внутри if of save или в последней строке ... как

function add() {

    if (!empty($this->data)) {
        $this->data['Comment']['user_id'] = $this->Auth->user('id');
        $this->Comment->create();
        if ($this->Comment->save($this->data)) {
           ....
           $this->autoRender = false;
        }
    }
}
1 голос
/ 16 августа 2010

Я подозреваю, что ваша форма отправляется, что заставляет меня думать, что оператор return false в конце вашего обработчика событий не делает то, что вы думаете, он делает.Элемент .submit_comment - это форма или кнопка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...