AJAX отправляет GET вместо POST - PullRequest
0 голосов
/ 23 ноября 2018

Я работаю над Laravel и пытаюсь отправить переменную в контроллер с помощью AJAX, но запрос меняется на GET!

AJAX

function fetchTasks(email) {
  $.ajax({
    method: 'POST',
    dataType: 'json',
    url: '/teamwork',
    data: {_method: 'POST', email : email},
    headers: {
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
  });
}

Routes.php

Route::any('/teamwork', 'TeamworkController@teamwork')->name('testPRoute');

Когда я изменяю метод маршрута на публикацию, он показывает 405 (метод не разрешен)

Когда я dd ($ request)в моем контроллере это то, что я получаю image

Итак, почему мой запрос Ajax не работает?

РЕДАКТИРОВАНИЕ: У меня естьизменил мой код на следующий

function fetchTasks(email) {
   console.log(email);
   var token = "{{ csrf_token() }}";

   $.ajax({
       method: "POST",
       url: "teamwork",
       data: {
           _token:token,
           'email': email
        },
        contentType: "application/json",

        success: function(data) {
           console.log(data);
        },
        error: function(err) {
           console.log(err);
        },
        complete: function () {
             window.location.href = '{{route("testTRoute")}}';
        }
});

}

Он все еще отправляет пустой запрос GET.Вывод с консоли следующий:

{readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}

Ответы [ 4 ]

0 голосов
/ 04 декабря 2018

После долгого времени отладки я обнаружил, что моя проблема была с маршрутизацией.У меня было два маршрута, GET и POST с тем же именем.Вот почему он всегда отправлял запрос GET.

0 голосов
/ 23 ноября 2018

Вы пробовали это?

$.ajax({
   headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
   url:'teamwork' ,
   type:'post',
   data: { email : email},
   method: 'POST',
   dataType: 'json',
   success:function(result){console.log(result);}
  });

Маршрут

Route::match(array('GET','POST'),'/teamwork', 'TeamworkController@teamwork')->name('testPRoute');
0 голосов
/ 23 ноября 2018

Если вы хотите отправить 'email' в качестве параметра маршрута, но не хотите показывать его в адресной строке браузера, вы можете сделать это, как показано ниже.

Отправка данных через форму

У вас blade.php

<form action="{{route('testPRoute')}}" method="POST">
    @csrf
    <!--
    Set your email name or variable in input's value attribute. Like
    <input type="text" name="email" value="email">
    or 
    <input type="text" name="email" value="{{$email}}">
     or -->
    <input type="hidden" name="email" value="email">
    <button type="submit">Go to Route</button>
</form>

У вашего Web.php

Route::post('/teamwork', 'TeamworkController@teamwork')->name('testPRoute');

У вашего контроллера

public function teamwork(Request $request)
{
    $email = $request->email;
    return $email;
}
0 голосов
/ 23 ноября 2018

На основе ajax документации вы должны использовать type param вместо method .

$.ajax({
  type: "POST",
  url: url,
  data: data,
  success: success,
  dataType: dataType
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...