我已经在网上搜了几个小时试图解决这个问题。我是AJAX的新手。因此,在尝试将数据提交给控制器时,我在控制台中收到内部服务器500错误。我认为这是一个CSRF不匹配,但我已经尝试了所有我能想到的解决方案。我在layout.blade.php中使用了meta标签方法来提交AJAX CSRF。
<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' => 'ViewPost@new_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();
}
}
}
修改
以下是问题http://pastebin.com/tNcN5bLP
的堆栈跟踪解决
我的“评论”模型正在使用“评论”进行调用。我通过添加一个s来修复它。 Woops!
此外,
我使用AJAX不正确地发布数据,因此我的控制器无法读取输入。来自我的AJAX的这个片段
var data = 'comment_content'+comment_content;
data : data,
应该是
data : {comment_content:comment_content},
谢谢!
答案 0 :(得分:0)
在主模板中尝试以下内容(您为每个新页面始终扩展的模板):
<script>
$(document).ready(function() {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': "{{ csrf_token() }}"
}
});
});
</script>
确保它是刀片模板,以便正确处理牙箍。
此外,尝试启用dubug模式并检查响应,以确保它不是完全不同的东西,如果你用问题的完整堆栈跟踪更新答案,它会更容易帮助。