AJAX发送GET而不是POST

时间:2018-11-23 00:53:09

标签: php ajax laravel

我正在研究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 :(得分:0)

基于ajax documentation,您应该使用 type 参数代替方法

$.ajax({
  type: "POST",
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

答案 1 :(得分:0)

您尝试过吗?

$.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');

答案 2 :(得分:0)

如果您要发送“电子邮件”作为路由参数,但又不想在浏览器的地址栏中显示它,则可以按以下方式进行操作。

通过表单发送数据

在您的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;
}

答案 3 :(得分:0)

经过长时间的调试,我发现我的问题出在路由上。我有两条相同名称的路由,即GET和POST。这就是为什么它总是发送GET请求。