2010-08-16 2 views
1

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

Controller Код

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

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

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

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

+1

При использовании других кэширования двигателей, clear_cache плагин стоит установить. Он предоставляет вам оболочку (называемую cake clear_cache) и очищает папку tmp, а также другие материалы tmp. С уважением, – benjamin

+0

Спасибо, CD, ваше предложение с изменением отправки на кнопку работало. Подача фактически отправила форму. Небрежная ошибка с моей стороны. – wcolbert

+0

Добро пожаловать. Рад помочь. –

1

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

2

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

внутри если, сохранить или в последней строке ... как

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; 
     } 
    } 
}