【问题标题】:Laravel, update field after ajax postLaravel,ajax发布后更新字段
【发布时间】:2016-01-28 01:10:02
【问题描述】:

我正在制作一个小型的类似系统。我已经成功地在我的数据库中发布了一个 ajax 帖子,在那里我将带有 row.like 的 tblarticles 增加了 1。现在在我发布 ajax 帖子的同一页面上,我想在每个 ajax 帖子之后更新字段的值.现在我的问题是我需要刷新,然后才能看到 1 而不是标准的 0

Ajax 帖子

$.ajax({
    url:"articles" ,
    type: "post",
    data: {
        'user_id':userid[0].value,
        'article_id':articleid[0].value,
        'user_id_fk':useridarticle[0].value,
        '_token': token[0].value
    },
    success: function(data){
        console.log(data);
    }
});

查看article/index.blade.php

@foreach($articles as $article)

          <div class="work-container">
              <article class="work-item">
                  <a href="{{action('HomeController@showArticle', [$article->id, $article->title])}}" class="work-thumbnail">
                      <img src="/articlePics/{{$article->image}}" alt="work-item">
                  </a>
                  <div class="work-info">
                      <span class="user">{{$article->title}}</span>
                      <div class="actions">
                          <form id="actionForm" action="" method="post" role="form">
                              <input type="hidden" name="articleId" value="{{$article->id}}">
                              <input type="hidden" name="userIdFk" value="{{$article->user_id}}">
                              <input type="hidden" name="userID" value="{{Auth::id()}}">
                              <input type="submit" name="like" class="likeBtn" id="test" value="Like">
                              <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
                          </form>
                          <span class="likes" name="currentLikes">{{$article->likes}}</span>
                      </div>

                  </div>
              </article>
          </div>
      @endforeach

控制器

if(Request::ajax()) {
        $data = Input::all();
        $user_id =  Auth::id();
        $article_id = Input::get('article_id');
        $user_id_fk = Input::get('user_id_fk');
        $results = DB::select( DB::raw("SELECT * FROM likes WHERE user_id = '$user_id' AND article_id = '$article_id'") );
        $likedOrNot = DB::table('likes')
                ->where('article_id', $article_id)
                ->where('user_id', $user_id)
                ->pluck('likes');

        $currentLikesDB = DB::table('articles')->where('id', $article_id)->pluck('likes');
        echo json_encode(['likesnumber' => $currentLikesDB]);

这是我想用 ajax 发布后发布的当前数据更改的最后一个跨度。

【问题讨论】:

  • 您需要传递counted currentLikes 的编码值,然后只需在您的success:function(data) 中就可以像$('.likes').text('data.name_of_field_you_passed') 一样访问它
  • 不要只是从您的控制器中回显。您需要设置标题。 Laravel 中的正确方法是 return Response::json(['likesnumber' =&gt; $currentLikesDB]);
  • 调用未定义的方法 Illuminate\Http\Response::json()

标签: php ajax laravel


【解决方案1】:

在您的控制器中,完成 requires 任务后,触发查询以获取计数。

然后在json_encode() 中回显。

在 ajax success() 中,您可以使用解析数据并添加到任何您想要的位置。

如果你只想获取一个值,则不需要json_encode()

直接回显值并在ajax中使用success()

【讨论】:

    【解决方案2】:

    尝试:

    articles 中用json_encode 回显类似的号码。

    $currentLikesDB = DB::table('likes')->where('article_id', $article_id)->first();
    $likesnumber = $currentLikesDB->likes;
    return json_encode(['likesnumber' => $likesnumber]);
    

    然后是ajax:

    $.ajax({
        url:"articles" ,
        type: "post",
        data: {
            'user_id':userid[0].value,
            'article_id':articleid[0].value,
            'user_id_fk':useridarticle[0].value,
            '_token': token[0].value
        },
        success: function(data){
            $('.likes').html(data.likesnumber);
        }
    });
    

    【讨论】:

    • likesnumber 无法识别,这是我在控制器中添加的 $currentLikesDB= DB::table('likes') ->where('article_id', $article_id) ->pluck('likes '); echo json_encode(['likesnumber' => $currentLikesDB]);
    • 还是一样...它也在我的编辑器中给出了这个 unresolved variable likesnumber
    • 成功后请控制台记录数据:console.log(data);你拿什么回来?
    • POST revise.dev/articles 500 (Internal Server Error) ,并在网络选项卡上 调用未定义的方法 stdClass::pluck()
    • 知道了。我的数据已经是一个对象。无需解析它。 javascript 解释器已经为我解析了它。 !非常感谢
    【解决方案3】:

    在您的 ajax 请求中,以 JSON 形式返回总计数,然后在您的 ajax 成功函数中写下这个

    success: function(data){
    $('.likes').html(data.likesCount);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      相关资源
      最近更新 更多