Я пробовал веб в течение многих часов, пытаясь решить эту проблему. Я довольно новичок в AJAX. Таким образом, я получаю ошибку внутреннего сервера 500 в консоли при попытке отправить мои данные контроллеру. Я думаю, что это несоответствие CSRF, но я пробовал все, что мог подумать, что это решило бы. Я использовал метод meta tag в своем макете.blade.php для представления ASRAX CSRF.Laravel 5 AJAX отправить внутреннюю ошибку сервера 500
<meta name="csrf-token" content="{{ csrf_token() }}">
<script>
$(function() {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
});
</script>
Мой код комментария выглядит следующим образом. Я прохожу $p->id
к маршруту, который проходит к контроллеру.
@if(Auth::check())
{!! Form::model($p, ['route' => ['new_comment.post', $p->id]]) !!}
<div class = "comment submit">
<textarea id = "comment_content" placeholder = "Your comment goes here!" name = "comment_content" class = "content_display comment"></textarea>
</div>
<div class = "action">
<li><a class = "comment_button new" href = "#"><i class = "fa fa-check"></i></a></li>
</div>
{!! Form::close() !!}
@else
<p><a href = "/login">Log in to post a comment</a></p>
@endif
Мой AJAX:
<script>
$('.comment_button.new').click(function(e) {
e.preventDefault();
var comment_content = $('#comment_content').val();
var data = 'comment_content'+comment_content;
var url = window.location.pathname;
$.ajax({
type : "POST",
url : url,
data : data,
success:function(data){
alert(data);
},
error:function(){
}
});
return false;
});
</script>
Мой маршрут:
Route::post('/home/view/{id}', ['as' => 'new_comment.post', 'before' => 'csrf', 'uses' => '[email protected]_comment']);
Мой контроллер:
class ViewPost extends Controller
{
public function show($id)
{
$posts = Posts::where('id', '=', $id)->get();
$comments = Comments::where('post_id', '=', $id)->get();
return view('view')->with('posts', $posts)->with('comments', $comments);
}
public function new_comment(Request $request, $id)
{
$comment_postID = $id;
$comment_data = $request->input('comment_content');
if($request->ajax()) {
$com = new Comment;
$com->post_id = $comment_postID;
$com->comment_content = $comment_data;
$com->save();
}
}
}
EDIT
Вот трассировки стека вопроса http://pastebin.com/tNcN5bLP
решаемые
Моя модель «Комментарии» в настоящее время вызывается с помощью «комментарий». Я исправил его, добавив s до конца. Woops!
Кроме того,
Я отправлял данные ненадлежащим образом с помощью AJAX, так что мой контроллер не смог прочитать входной сигнал. Этот фрагмент из моего AJAX
var data = 'comment_content'+comment_content;
data : data,
Должно быть
data : {comment_content:comment_content},
спасибо!
подумайте больше о 'var url = window.location.pathname;', напишите url что-то вроде этого и проверьте 'url: window.location.pathname; + '/ home/view /' + commentId' –
@Pedrammarandi '/ home/view/{{$ p-> id}}' помещает тот же url, что и window.location.pathname – austin43