【问题标题】:Missing params in Ajax Post request in LaravelLaravel 的 Ajax Post 请求中缺少参数
【发布时间】: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;   
}

【问题讨论】:

    标签: ajax laravel post missing-data


    【解决方案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”。
    猜你喜欢
    • 2015-07-02
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    相关资源
    最近更新 更多