Laravel 的 Ajax Post 请求中缺少参数

Posted

技术标签:

【中文标题】Laravel 的 Ajax Post 请求中缺少参数【英文标题】:Missing params in Ajax Post request in Laravel 【发布时间】:2019-04-04 21:32:04 【问题描述】:

我正在尝试发出 Ajax 发布请求并传递参数以在查询中使用它们,但我的参数始终为空。这是我的代码:

$.ajaxSetup(
    headers: 
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        
);

function searchPatient()
    var params = 
        'name'      : $("#input-search-name").val(),
        'lastname'  : $("#input-search-lastname").val() 
    
    console.log($('meta[name="csrf-token"]').attr('content'));
    $.ajax(
        data        :  params,
        url         : ' route("searchPatient") ',
        contentType: "application/json",
        type        : 'post',
        beforeSend  : function()
            console.log(params);
        ,
        success     : function(data)
            //Inserto a la tabla principal el contenido
            $("#main-table-patients").html(data);
            //alert('exito');
        ,
        error       : function(xhr, status, error) 
              var err = eval("(" + xhr.responseText + ")");
              console.error(err.Message);
        
    );

这是我的 web.php

Route::group(['middleware'=>'auth'], function()
  Route::namespace('Patient')->group(function()
    Route::resource('/patients','PatientController');
    Route::post('/patients/search/name?/lastname?','PatientController@search')->name('searchPatient');
  );
);

这是我在控制器中的方法

public function search($name = '', $lastname = '')

  $patients = '';
  $patients = Patient::where('name', 'like', '%'.$name.'%')
      ->Where('lastName','like','%'.$lastname.'%');

  return $name.' and '.$lastname;   

【问题讨论】:

【参考方案1】:

这是一种预期的行为。您在 POST 中发送变量,但您的路由旨在从 url 检索变量。 决定你想要什么... 如果你想在 POST 中传递它们,那么你的 ajax 调用的 url 应该是 /patients/search 你的路线应该只有

Route::post('/patients/search','PatientController@search');

此时你的控制器可以处理 $request 对象

public function search(Illuminate\Http\Request $request) 
    dd($request->all());

如果您想在 url 中传递它们(恕我直言,这不是一个好主意) 然后将您的 ajax 调用 url 更改为:

url: '/patients/search/' + params.name + "/" + params.lastname

如果 2 个参数之一包含“斜杠”(/),这种方法可能会导致问题

【讨论】:

感谢它的工作,我决定使用第一种方式。我还必须在我的 AJAX 请求中删除:“内容类型:application/json”。

以上是关于Laravel 的 Ajax Post 请求中缺少参数的主要内容,如果未能解决你的问题,请参考以下文章

Django CSRF 令牌错误或缺少 Ajax POST 请求

仅在 HTTPS 中执行 ajax POST 请求时,Laravel 403 错误(生产)

Laravel中的AJAX POST请求[重复]

Laravel 5.1 AJAX - 即使我发送 POST 请求,也不允许返回 405 GET 方法

我的 POST ajax 请求在 Laravel 控制器上返回 302

Laravel Ajax 请求使用 post 方法抛出 MethodNotAllowedException