我正在尝试使用AJAX技术添加评论,但出现错误: Failed to load resource: http://localhost:8888/blog/public/comment/add the server responded with a status of 500 (Internal Server Error) 这是我的代码:View:
Failed to load resource: http://localhost:8888/blog/public/comment/add the server responded with a status of 500 (Internal Server Error)
{{ Form::open(array('method'=>'post','class'=> 'col-md-6','url' => '/comment/add', 'id'=>'comment')) }} <input type="hidden" name="post_id" value="{{$id}}"> <div class="row"> <div class="inner col-xs-12 col-sm-12 col-md-11 form-group"> {{Form::label('name', 'Imię')}} {{Form::text('username', null, array('class'=>'form-control', 'id'=>'name', 'name'=>'name'))}} </div> <div class="inner col-xs-12 col-sm-12 col-md-12 form-group"> {{Form::label('message', 'Wiadomość')}} {{Form::textarea('message', null, array('class'=>'form-control', 'id'=>'message', 'name'=>'message', 'rows'=>'5'))}} </div> </div> <div class="row"> <div class="col-xs-12 col-md-12 submit form-group"> {{Form::submit('Wyślij', array('name'=>'submit', 'class'=>'btn btn-orange'))}} </div> </div> {{ Form::close() }}
控制器:
public function addComment() { $this->layout = null; //check if its our form if(Request::ajax()){ $name = Input::get( 'name' ); $content = Input::get( 'message' ); $comment = new Comment(); $comment->author = $name; $comment->comment_content = $content; $comment->save(); $postComment = new CommentPost(); $postComment->post_id = Input::get('post_id'); $postComment->comment_id = Comment::max('id'); $postComment->save(); $response = array( 'status' => 'success', 'msg' => 'Setting created successfully', ); return 'yea'; }else{ return 'no'; } }
AJAX:
jQuery( document ).ready( function( $ ) { $( '#comment' ).on( 'submit', function(e) { e.preventDefault(); var name = $(this).find('input[name=name]').val(); $.ajax({ type: "POST", url: host+'/comment/add', }).done(function( msg ) { alert( msg ); }); }); });
最后一条路线:
Route::post('comment/add', 'CommentController@addComment');
任何人都知道问题出在哪里,为什么我不能提交表格?
您没有发布任何数据,
$.ajax({ type: "POST", url: host+'/comment/add', }).done(function( msg ) { alert( msg ); });
您得到的错误是DB中的列不能为空。
尝试将您的ajax调用更改为此:
$.ajax({ type: "POST", url: host+'/comment/add', data: { name:name, message:message, post_id:postid }, success: function( msg ) { alert( msg ); } });
改变这个
var name = $(this).find('input[name=name]').val();
至
var name = $('#name').val();
并获取消息和帖子ID:
var message = $('#message').val(); var postid = $('#post_id').val();
完成ajax块:
$('#comment').on('submit', function(e) { e.preventDefault(); var name = $('#name').val(); var message = $('#message').val(); var postid = $('#post_id').val(); $.ajax({ type: "POST", url: host+'/comment/add', data: {name:name, message:message, post_id:postid} success: function( msg ) { alert( msg ); } }); });
最后,在隐藏字段中添加一个ID:
<input type="hidden" name="post_id" id="post_id" value="{{$id}}">
从Laravel控制器发送回数据,例如
// ........ $response = array( 'status' => 'success', 'msg' => 'Setting created successfully', ); return Response::json($response); // <<<<<<<<< see this line }else{ return 'no'; } }
这会将响应中的数据发送回ajax请求。
然后,更改您的ajax成功函数:
// ....... success: function( msg ) { $("body").append("<div>"+msg+"</div>"); } // ..........
现在,您将看到在您创建的新div中<body>包括了已创建的响应。如果要显示新创建的帖子,只需将其创建为ajax响应并将其附加到页面中的任何元素即可。
<body>