Идентификатор пользователя не проходит через Ajax в laravel - PullRequest
0 голосов
/ 27 июня 2019

Я создаю счетчик просмотров в laravel, поэтому в данном случае я создал небольшие карточки для внесения в список клиентов, если при нажатии кнопки «просмотр» карта развернется и также будет считаться представлением.

Я использовал Buefy во внешнем интерфейсе, поэтому карта расширяется всякий раз, когда я нажимаю на представление, я также добавляю событие onclick и передаю текущий идентификатор пользователя конкретной карты, после щелчка она вызовет функцию AJAX, которая будет увеличиваться на +1 в столбце view_counter. Но Ajax не передает идентификатор контроллеру, я пробовал оповещение, которое работает нормально, это означает, что мой синтаксис неправильный.

Вот мой взгляд: network.blade.php

                      <button
                            onclick='viewUpdate("{{$user->id}}")'
                            class="button is-primary"
                            slot="trigger"
                            aria-controls="contentIdForA11y1" 
                            >
                              View!
                      </button>

Мой Ajax-скрипт:

 <script>
   function viewUpdate(val) 
   {
    //alert(val);
    jQuery.ajax({
    url: "{{ url('dne/viewincrement') }}",
    method: 'post',
    data: {
      'id': val
    },
    success: function(result){
    console.log('success');
    }
   });
  }
 </script>

Насколько мне известно, когда кто-то нажимает кнопку, он отправляет идентификатор пользователя этой карты и в сценарии, который будет храниться в viewUpdate (val), теперь я передаю это значение Id контроллеру.

Это мой маршрут:

    Route::prefix('dne')->group(function() {
     Route::post('/viewincrement', 'DNE\DNEFrontController@count');
    }

а это мой контроллер: DNEFrontController.php

   public function count(Request $request)
   {
    //dd($request);
    $user = DNEUser::findOrFail($id);
    if(isset($user) && !empty($user)){
      $user->view_counter+=1;
      $user->save();
     }
     //$this->addData('user', $user);
    return $this->getView('dne.customer.pizza');
    }

view_counter - это мой столбец, который по умолчанию равен 0, он будет увеличиваться на +1. Текущая ситуация: кнопка работает и вызывается Ajax, он показывает значение id в оповещении, но в консоли выдает:

POST http://localhost:8000/dne/viewincrement 419 (неизвестный статус)

Ответы [ 4 ]

1 голос
/ 27 июня 2019

Поскольку вы используете POST-запрос, вам может потребоваться отправить csrf _token с вашим запросом или вы можете попробовать GET-запрос

0 голосов
/ 27 июня 2019

419 код состояния говорит, что токен не найден или токен истек. Таким образом, вы можете использовать два метода для передачи токена: 1. Передайте с данными: -

data: {
  'id': val,
  '_token': "csrf_token"
},

Вам нужно повторять это каждый раз, когда вы вызываете ajax с сообщением.

  1. Настройка в шапке: - Вам нужно настроить его, как только он будет работать для всех. нет необходимости настраивать снова.
if (s.type == "POST") {
   xhr.setRequestHeader('X-CSRF-Token', csrf_token);
}
});
0 голосов
/ 27 июня 2019

Измените эту строку на

$user = DNEUser::findOrFail($id);

до

$user = DNEUser::findOrFail($request->id);

Дополнительно:

Методы findOrFail и firstOrFail извлекают первый результат запроса; однако, если результат не найден, выдается Illuminate\Database\Eloquent\ModelNotFoundException:

Если исключение не обнаружено, HTTP-ответ 404 автоматически отправляется обратно пользователю.

0 голосов
/ 27 июня 2019

когда вы передаете его на ajax, это будет запрос, поэтому вы должны называть это так

$request->id

надеюсь, это поможет! :)

...