AJAX technologyを使用してコメントを追加しようとしていますが、エラーがあります: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 );
});
});
});
最後の1つのルート:
Route::post('comment/add', 'CommentController@addComment');
誰が問題がどこにあり、なぜフォームを送信できないのかを知っていますか?
データを投稿していません。
$.ajax({
type: "POST",
url: Host+'/comment/add',
}).done(function( msg ) {
alert( msg );
});
取得しているエラーは、DBの列をnullにすることはできないということです。
これに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>");
}
// ..........
<body>
に作成された応答を含む新しいdivが作成されたことがわかります。新しく作成した投稿を表示する場合は、ajax応答として作成し、ページ内の任意の要素に追加します。
baao's answer のajaxブロックを変更するだけです。シリアル化されたデータを渡すことができます。
_$('#comment').on('submit', function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: Host+'/comment/add',
data: $(this).serialize(),
success: function(msg) {
alert(msg);
}
});
});
_
フォームのすべてのフィールド値は、serialize()
関数を使用して渡すことができます。