【问题标题】:laravel - jquery/ajax Data emptylaravel - jquery/ajax 数据为空
【发布时间】:2018-07-21 18:48:13
【问题描述】:

我正在尝试使我的评论提交表单无需刷新即可工作,并将数据附加到 div 以显示评论。 目前提交表单有效,它被插入到数据库中,因此数据被传递给控制器​​,但它没有显示在 console.log 和 append 上。

JS

$("#newsCommentForm").submit(function(e){

  e.preventDefault();
    $.ajax({
      method: 'POST',
      url: '/store',
      data: $(this).serialize(),
      success:function(data){
          console.log( $( this ).serialize() );
        $('#test').append(data); 
      },
      error: function( e ) {
          console.log(e);
      }
  });
});

控制器

protected function storeNewsComment(Request $request)
{
     Comment::create([
         'user_id'  => Auth::user()->id,
         'blog_id'  => $request->input('blog_id'),
         'body'  => $request->input('body'),
     ]);
}

我在视图中做了一个测试 div

<div id="test">

</div>

【问题讨论】:

  • 你期望什么输出? storeNewsComment()是你的行动吗?如果是,为什么要保护它?此外,它没有返回任何东西
  • 没有意识到控制器需要返回任何东西,我想既然数据是在 Ajax 中定义的,并且在那里调用了 console.log,它也存储在那里。那我应该返回什么?我希望输出是用户标识/博客标识/正文
  • 谢谢,你让我走上正轨,现在可以了。

标签: jquery ajax laravel


【解决方案1】:

您只需将新评论保存到变量并返回即可。

protected function storeNewsComment(Request $request)
{
    $comment = Comment::create([
        'user_id'  => Auth::user()->id,
        'blog_id'  => $request->input('blog_id'),
        'body'  => $request->input('body'),
    ]);

    return response($comment);
}

【讨论】:

  • $return_array = compact('comment');返回 json_encode($return_array);似乎对我有用。
  • @MitchM 好吧,您可以以更适合您的前端的方式返回数据。
【解决方案2】:

thissuccess回调函数中有不同的含义,指的是function's context。在进入该函数之前,您需要保存对this 的引用:

$("#newsCommentForm").submit(function(e){
  var self = this;
  // ... code truncated for brevity

  success: function() {
    console.log( $( self ).serialize() );
  }
 });

【讨论】:

    猜你喜欢
    • 2016-07-15
    • 2014-01-29
    • 2011-08-05
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    相关资源
    最近更新 更多