Я полностью застрял, пытаясь обработать форму submit, используя ajax вместо laravel, чтобы избежать перезагрузки страницы и т. Д. Но это не работает, и я не знаю почему. Я искал замечательный веб-сайт, который проходит через пример, но ничего не работает для меня. Это самое близкое, что я могу получить. Мои знания ограничены, но мои амбиции высоки. Пожалуйста, уделите мне минутку и просмотрите мой код, так что я сейчас на грани психического расстройства.
Вот мой jquery:
$(document).ready(function() { $('#ajax').submit(function(event){ $.ajax({ type: 'POST', url: 'comments', data: $('form#ajax').serialize(), dataType: 'json', }) .done(function(data) { console.log(data); }); event.preventDefault(); }); });
И вот моя форма в виде лезвия:
{{ Form::open(array('url'=>'comments', 'id' => 'ajax')) }} {{ Form::hidden('parent_id', null) }} {{ Form::hidden('author', Auth::user()->username) }} {{ Form::textarea('content', null, array('placeholder' => 'Enter your comment here:', 'onfocus' => 'this.placeholder=""')) }}<br/> {{ Form::submit('Comment', array('class'=>'submit')) }} {{ Form::close() }}
И вот мой контроллер:
public function createComment() { //fixa här så man inte kan kommentera tom kommentar $validate = array('content' => 'required'); $validator = Validator::make(Input::all(), $validate); if($validator->fails()) { return Redirect::to('comments')->withErrors($validator)->withInput(Input::all()); } else { $comment = new Comment(); $comment->parent_id = Input::get('parent_id'); $comment->author = Input::get('author'); $comment->content = Input::get('content'); $comment->save(); } } public function postComment() { if(Request::ajax()) { $this->createComment(); return Response::json(Input::all()); } } public function getCommentsAndForm() { $comments = Comment::orderBy('id')->get(); return View::make('comment')->with('comments', $comments); }
И вот мои маршруты:
Route::get('comments', array('uses' => 'CommentController@getCommentsAndForm')); Route::post('comments', array('uses' => 'CommentController@postComment'));
Когда я отправляю форму, она исчезает и ничего не отображается. Если я удалю if(Request::ajax())
комментарии будут опубликованы, но форма все равно исчезнет, а вместо пустой страницы я получаю комментарий в JSON. И когда я перезагружаю страницу, комментарии показывают, как я хочу. В чем проблема? Что я делаю не так? Я хочу, чтобы опубликованный комментарий отображался выше моей формы без перезагрузки страницы, есть ли решение?
$(document).ready(function() { $('#ajax').submit(function(event){ event.preventDefault(); $.ajax({ type: 'POST', url: 'comments', data: $('form#ajax').serialize(), dataType: 'json', }) .done(function(data) { console.log(data); }); //just to be sure its not submiting form return false; }); });
Важным здесь является предотвращение подачи формы. Вы можете попробовать изменить кнопку отправки на кнопку.