【问题标题】:Submit form laravel using AJAX使用 AJAX 提交表单 laravel
【发布时间】:2015-02-05 09:54:13
【问题描述】:

我正在尝试使用 AJAX 技术添加评论,但出现错误: 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');

任何人都知道问题出在哪里以及为什么我无法提交表单?

【问题讨论】:

  • javascript 中主机的值?
  • &lt;script&gt; var host = "{{URL::to('/')}}"; &lt;/script&gt; 所以它有http://localhost:8888/blog/public
  • 500 错误意味着您的 Laravel 日志中可能有有用的错误消息。检查那里。
  • 你不需要主机,试试 url: '/comment/add'
  • 你检查过 laravel 日志吗?

标签: javascript php jquery ajax laravel-4


【解决方案1】:

您没有发布任何数据,

    $.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>");
 }

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

您现在将看到在您的&lt;body&gt; 中创建了一个新的 div,包括创建的响应。如果要显示新创建的帖子,只需将其创建为 ajax 响应并将其附加到页面中的任何元素即可。

【讨论】:

  • 它工作我没有任何错误,但我必须刷新页面才能看到新评论。你知道为什么吗?
  • 因为你只是将数据传递给控制器​​,如果你想直接看到新的评论,你需要将它发送回你的ajax请求,在成功函数中捕获并输出。我将用一个小例子来编辑我的帖子,我相信你会用它来解决的,给我一秒钟。 @Zobo 。如果对您有帮助,请采纳答案
  • 我已经编辑过了。 @Zobo 成功了就试试,不行的话再问!
  • 好的,我知道了,但我还有一个问题。这是我的 SinglePostController pastebin.com/jfKU1dKy 我在 cmets 和单个帖子之间有关系。如何将已添加评论的 ajax 内容发送回并为属于该帖子的 cmets 添加 +1?
  • 我认为如果您以这种方式发送数据,您还需要注意csrf 令牌。
【解决方案2】:

只是修改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()函数传递。

【讨论】:

  • 你真的拯救了我的一天
猜你喜欢
  • 2020-03-25
  • 2015-10-25
  • 2016-12-16
  • 1970-01-01
  • 2016-12-10
  • 2016-06-11
  • 2019-05-04
  • 1970-01-01
  • 2015-08-16
相关资源
最近更新 更多