【问题标题】:Output from controller to HTML form从控制器输出到 HTML 表单
【发布时间】:2019-09-25 14:06:06
【问题描述】:

谁能告诉我如何将数据从我的控制器输出到 HTML 表单。如果用户之前已经点击过链接,我想将锚点的标签从“喜欢”更改为“喜欢”。

这是 HTML。

<section class="row posts">
    <div class="col-md-6 col-md-3-offset">
        <header><h3>other posts</h3></header>
        @foreach($posts as $post)
            <article class="post">
                <p>{{ $post->content }}</p>
                <div class="info">Posted by {{ $post->user->username }} on {{ $post->created_at }}</div>
                <div class="interaction">
                    <a href="#" class="like" data-postid="{{ $post->id }}">Like</a>
                    @if(auth()->user() === $post->user)
                        |
                        <a href="#" class="edit" data-postid="{{ $post->id }}">Edit</a> |
                        <a href="{{ route('post.delete',['post_id' => $post->id]) }}">Delete</a>
                    @endif
                </div>
            </article>
        @endforeach
    </div>
    <script>
        var token = '{{ session()->token() }}';
        var urlLike = '{{ route('like') }}';
    </script>
</section>

从表单获取postid的JavaScript:

...
$('.like').on('click', function (event) {
        event.preventDefault();
        postId = event.target.dataset.postid;
        var isLike = event.target.previousElementSibling==null ? true:false;
        $.ajax({
           method: 'POST',
           url: urlLike,
           data: {isLike: isLike, postId: postId, _token: token}
        })
        .done(function () {
            //change the page
        })
    })
...

路线:

Route::post('/like',[
        'uses' => 'PostController@postLikePost',
        'as' => 'like'
    ]);

最后,谁能告诉我如何将控制器的输出发送到 HTML 表单?

public function postLikePost(Request $request)
{
    $post_id = $request['postId'];
    $is_like = $request['isLike'] === 'true' ? true : false;
    $post = Post::find($post_id);
    if (!$post) {
        return null;
    }
    $user = Auth::user();
    $like = $user->likes()->where('post_id', $post_id)->first();

    if ($like) { // user already liked the post
        $like->delete();

        return null; // output to "Like" in the html form here
    }

    $like = new Like();
    $like->post_id = $post->id;
    $like->user_id = $user->id;
    $like->save(); // output to "Liked" in the html from here

    return null;
}

如果用户已经喜欢了帖子,Like 锚的标签应该从 Like 变为 Like。

【问题讨论】:

  • 控制器的响应在哪里?您还需要设置您的 ajax 请求。
  • @AdityaThakur 我想编写指令以从控制器的注释部分更改喜欢到喜欢。比方说,如果一个用户已经喜欢了一个帖子,它将被记录在数据库中,并且 Like 将被更改为 Liked。现在,如果同一用户再次单击 Liked 按钮,我需要验证该记录是否已存在于数据库中并将其删除(因此我必须从 html 获取帖子的唯一 id 并检查数据库并将数据发送回 html ) 不知道如何同时做这两个...
  • 可以同时设置一个ajax请求来POST和GET吗?
  • 我发布了一个示例,说明如何实现它。

标签: javascript php jquery html laravel


【解决方案1】:

您可以这样做,但根据您的需要进行更改。

public function postLikePost(Request $request)
{
  $post = Post::where('id', $request->get('post_id'))->first();
  if(!$post){
    return response()->json(['status' => 1, 'message' => 'post not found']);
  }
  if($post->liked == 1)//change it as per your model
  { 
    return response()->json(['status' => 2, 'message' => 'already liked']);
  }
  $post->status = 1;
  $post->save();
  return response()->json(['status' => 3, 'message' => 'liked']);
}

在你的 ajax 中取得成功

success: function(response){
  if(response.status == 1){
   window.alert('Post Not Found')
  }
  else{
   document.querySelector('#likeBtn').innerHTML = 'liked'
  }

点赞按钮

<a href="#" class="like" id="likeBtn" data-postid="{{ $post->id }}">Like</a>

【讨论】:

    【解决方案2】:

    我将两者都设置为 POST,然后在您的 success 块中查询结果并设置为 likeliked。比如:

    success: function (data) {
        document.getElementById("something").innerHTML = "Liked";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-11
      • 2013-11-10
      • 2017-12-02
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      相关资源
      最近更新 更多