【问题标题】:AJAX sending a GET instead of a POSTAJAX 发送 GET 而不是 POST
【发布时间】:2018-11-23 00:53:08
【问题描述】:

我正在使用 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: ƒ, …}

【问题讨论】:

  • 怎么叫ajax?任何按钮按下或菜单链接(标签)?我怀疑您使用带有链接的ajax。如果是这样,它将无法正常工作。
  • 我首先验证数据库中是否存在用户电子邮件。如果是这样,我用“fetchtasks();”调用该函数。我认为它正在工作,因为正如您在图像中看到的那样,它将路线更改为“/teamwork”

标签: php ajax laravel


【解决方案1】:

基于 ajax documentation 你应该使用 type 参数而不是 method

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

【讨论】:

    【解决方案2】:

    你试过了吗?

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

    【讨论】:

    • 同样的问题没有改变
    【解决方案3】:

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

    通过表单发送数据

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

    【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 2015-06-02
      • 2017-08-09
      相关资源
      最近更新 更多