web-dev-qa-db-fra.com

Soumettre le formulaire laravel using AJAX

J'essaie d'ajouter un commentaire en utilisant la technologie AJAX mais j'ai une erreur: Failed to load resource: http://localhost:8888/blog/public/comment/add the server responded with a status of 500 (Internal Server Error) Voici mon code: Affichage:

{{ 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() }}

Manette:

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 );
        });

    });
});

Et la dernière route:

Route::post('comment/add', 'CommentController@addComment');

Quelqu'un a une idée d'où vient le problème et pourquoi je ne peux pas soumettre mon formulaire?

9
Zobo

Vous ne publiez aucune donnée,

    $.ajax({
        type: "POST",
        url: Host+'/comment/add',
    }).done(function( msg ) {
        alert( msg );
    });

L'erreur que vous obtenez est que les colonnes de la base de données ne peuvent pas être nulles.

Essayez de changer votre appel ajax en ceci:

    $.ajax({
        type: "POST",
        url: Host+'/comment/add',
        data: { name:name, message:message, post_id:postid }, 
        success: function( msg ) {
            alert( msg );
        }
    });

Change ça

var name = $(this).find('input[name=name]').val();

à

var name = $('#name').val();

et récupérer le message et l'identifiant du message:

var message = $('#message').val();
var postid = $('#post_id').val();

Bloc ajax complet:

   $('#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 );
           }
       });
   });

Et enfin, ajoutez un ID au champ caché:

<input type="hidden" name="post_id" id="post_id" value="{{$id}}">

Renvoyer les données depuis le contrôleur Laravel, par exemple.

    // ........

        $response = array(
            'status' => 'success',
            'msg' => 'Setting created successfully',
        );
        return Response::json($response);  // <<<<<<<<< see this line
    }else{
        return 'no';
    }
}

Cela renverra les données de votre réponse à votre demande ajax.

Ensuite, modifiez votre fonction de réussite ajax:

 // .......
 success: function( msg ) {
     $("body").append("<div>"+msg+"</div>");
 }

 // ..........

Vous verrez maintenant qu'une nouvelle div a été créée dans votre <body> y compris la réponse créée. Si vous souhaitez afficher le message nouvellement créé, créez-le simplement comme réponse ajax et ajoutez-le à n'importe quel élément de votre page.

21
chris p bacon

Il suffit de modifier le bloc ajax de réponse de baao . Vous pouvez transmettre des données en série.

$('#comment').on('submit', function(e) {
    e.preventDefault(); 
    $.ajax({
        type: "POST",
        url: Host+'/comment/add',
        data: $(this).serialize(),
        success: function(msg) {
        alert(msg);
        }
    });
});

Toutes les valeurs de champ du formulaire peuvent être transmises à l'aide de la fonction serialize().

11
aiswarya