2014-12-07 47 views
7

我试图使用AJAX技术添加评论提交表单laravel,但我有一个错误: Failed to load resource: http://localhost:8888/blog/public/comment/add the server responded with a status of 500 (Internal Server Error) 这里是我的代码: 查看:使用AJAX

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

    }); 
}); 

A nd最后一条路线:

Route::post('comment/add', '[email protected]'); 

任何人都有一个想法,问题在哪里,为什么我不能提交我的表单?

+0

javascript中的主机值? – 2014-12-07 18:29:40

+0

''因此它具有'http:// localhost:8888/blog/public' – Zobo 2014-12-07 18:32:27

+0

500错误意味着您的Laravel日志中可能有一条有用的错误消息。在那里检查。 – ceejayoz 2014-12-07 18:32:30

回答

12

您还没有公布任何数据,

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

你所得到的错误是在数据库中的列不能为空。

试图改变你的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响应并将其附加到页面中的任何元素。

+0

它的工作我没有任何错误,但我必须刷新页面以查看新评论。你知道为什么吗? – Zobo 2014-12-07 20:14:45

+1

由于您只将数据传递给控制器​​,如果您想直接查看新评论,则需要将其发回给您的ajax请求,并将其捕获到成功函数中并输出。我会用一个小例子来编辑我的文章,我相信你会知道这个,给我一秒钟。 @Zobo。请接受答案,如果它已帮助您 – baao 2014-12-07 20:20:07

+0

我已编辑它。 @Zobo尝试,如果你有成功,如果不是随意再问! – baao 2014-12-07 20:28:53

8

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

+0

你真的救了我的一天 – 2016-12-30 20:28:49