#php #ajax #laravel
#php #ajax #laravel
Вопрос:
я успешно добавил новый комментарий в базу данных, но почему он должен обновить страницу, чтобы увидеть новый комментарий. я запутался в этой проблеме. где часть моего кода неверна?
вот мой код.
маршрут
Route::post('blog/{post}/comments/store', 'AuthMemberCommentController@store')->name('comment.add');
примечание контроллера
комментариев: я использую decode для идентификатора записи с использованием хэша.
public function store(RequestsCommentStoreRequest $request)
{
if($request->ajax()){
$comment = new Comment;
$comment->body = $request->get('comment_body');
$comment->user()->associate($request->user('member'));
$key = $request->get('post_id');
$result = Hashids::connection('main')->decode($key)[0];
$post = Post::find($result);
$post->comments()->save($comment);
$response = array(
'status' => 'success',
'msg' => 'comment has been added',
);
return Response::json($response);
}
}
сформировать комментарий
{!! Form::open(array(
'route' => ['comment.add', $post->slug],
'method' => 'POST',
'id' => 'form',
'name' => 'form',
'data-parsley-validate'))
!!}
<div class="form-group {{ $errors->has('comment_body') ? 'has-error': '' }}">
{!! Form::textarea('comment_body', null, array(
'class' => 'form-control elastic',
'id' => 'comment_body',
'rows' => '3',
'name' => 'comment_body',
'placeholder' => 'Write Something...',
'required', 'minlength="4"')
)
!!}
@if($errors->has('comment_body'))
<span class="help-block">{{$errors->first('comment_body')}}</span>
@endif
<input type="hidden" name="post_id" value="{{ $parameter }}" />
</div>
<div class="form-group">
{!! Form::submit('Submit', array(
'name' => 'submit',
'class' => 'btn btn-primary',
'id' => 'btnComments'
)) !!}
</div>
{!! Form::close() !!}
ajax, так что это мой ajax для хранения нового комментария в базе данных
<script>
$(document).ready(function(){
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$('#form').on('submit', function(event) {
event.preventDefault();
var form = $(this);
var url = form.attr('action');
$.ajaxSetup({
headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }
});
$.ajax({
// url: '{{route('comment.add',[$post->slug])}}',
url: url,
type: 'POST',
data: form.serialize(),
dataType: 'JSON',
success: function (data) {
console.log(data);
},
error: function(data){
console.log(data);
}
});
});
});
</script>
Ответ №1:
Вы перенаправляете как :
return redirect()->to(app('url')->previous(). '#comments')->with('message-post', 'Comment has been added');
Попробуйте вернуть JSON как:
return response()->json(["success"=>"true", "message"=>"Comment has been added"]);
Комментарии:
1. вы просто бросаете ответ на сообщение.
2. Обратите внимание на => вместо : .
3. можете ли вы записать его в консоль таким образом, console.log (data.message), и он должен распечатать сообщение для вас
4. Его подход должен работать для вас, а не возвращать перенаправление, вы должны вернуть ответ
5. ДА. я делаю. но мне все равно нужно перезагрузить страницу, чтобы показать новый комментарий.