2016-07-29 3 views
0

Название может быть немного расплывчатым, извините за это, позвольте мне объяснить.Запрос jQuery get() извлекает данные до отправки новых данных.

У меня есть users_status_likes стол с последующей столбцами: идентификатор, user_id, status_id

Идея проста, когда пользователь щелкает как кнопки состояния, данные получает переданы в базу данных с вошедшего в user_id и status_id статуса.

Теперь я пытаюсь выполнить запрос get(), чтобы получить количество понравившихся статусов. Проблема в том, что запрос get запрашивает количество понравившихся статусов до того, как будет добавлен новый.

Например, есть статус, у которого есть 1, но затем я нажимаю кнопку типа like, так что теперь у него есть 2 понравившиеся, в таблице есть 2 строки для одного status_id, но у каждого есть другой user_id. Когда я нажимаю подобную кнопку, консоль говорит count 1, но это действительно должно быть count 2, потому что мне просто понравился статус, и данные были отправлены в таблицу.

Я использую Laravel 5.2, так что позвольте мне начать с проводкой маршрут

Route::get('likestatusCount/{id}', '[email protected]'); 

getlikesCounter() метод FeedController

public function getlikesCounter($id) { 
    $status = Status::find($id); 
    return Response::json(['count' => StatusLikes::where('status_id', $status->id)->count()]); 
} 

И форма внутри вида

{!! Form::open(['action' => '[email protected]', 'id' => 'like_form', 'class' => 'likeform']) !!} 
      <button type="submit" class="btn btn-info btn-xs like" data-user="{{ Auth::user()->id }}" data-status="{{ $status->id }}" id="like-status"> 
      <i class="fa fa-thumbs-up"></i> <span class="like-button-text">Like</span> <span class="like-button-counter">({{ $likes_count }})</span> 
      </button> 
{!! Form::close() !!} 

Javascript

$('.likeform').submit(function(e) { 
    e.preventDefault(); 

    var submitBtn = $(this).find('.like'); 
    var likeText = $(this).find('span.like-button-text'); 
    var likeCounter = $(this).find('span.like-button-counter'); 
    var status_id = submitBtn.data('status'); 
    var user_id = submitBtn.data('user'); 
    var token = $('input[name=_token]').val(); 

    $.ajaxSetup({ 
     headers: { 
      'X-CSRF-TOKEN': token 
     } 
    }); 

    $.ajax({ 
     url: 'http://localhost/socialnet/public/likeStatus', 
     method: 'POST', 
     cache: false, 
     data: { like_status: status_id, user_id: user_id, _token: token }, 
     success: function(data) { 
      submitBtn.removeClass('btn-info').addClass('btn-danger'); 
      submitBtn.find($(".fa")).removeClass('fa-thumbs-up').addClass('fa-thumbs-down'); 
      likeText.text('Dislike'); 
      console.log(data); 
     }, 
     error: function() { 
      console.log('error'); 
     } 
    }); 

    // data.count returns the count before the new like has been submitted 
    $.get("http://localhost/socialnet/public/likestatusCount/" + status_id, function(data) { 
     likeCounter.text(data.count); 
     console.log(data.count); 
    }); 
}); 
+2

AJAX вызовы являются асинхронными, так что если вы полагаетесь на ответ будут доступны для других AJAX звонки, вам необходимо поместить их в функции обратного вызова , success() или error() – otherstark

+1

Если вы заботитесь о производительности и разумном использовании ресурсов вообще, то вы должны вернуть это число _in response_ в запрос POST, который только что создал новое. – CBroe

ответ

4

ход это:

$.get("http://localhost/socialnet/public/likestatusCount/" + status_id, function(data) { 
    likeCounter.text(data.count); 
    console.log(data.count); 
}); 

внутри

success: function(data){ 

} 
Смежные вопросы