【问题标题】:How to pass data from ajax to laravel 5.2 controller via post method如何通过 post 方法将数据从 ajax 传递到 laravel 5.2 控制器
【发布时间】:2016-07-09 20:37:16
【问题描述】:

你好 StackOverflow 家族。这是我的第一个问题,希望能得到帮助。

我是 laravel 框架的新手,我的项目中使用的是 5.2 版。 我正在尝试使用 post 方法将数据从我的 ajax 函数传递到特定的控制器方法,但没有数据传递到控制器。

我按照此论坛https://laracasts.com/discuss/channels/laravel/process-data-in-controller-using-ajax-in-laravel 中的步骤操作,但无法正常工作。这是我到目前为止所做的。

我的 JavaScript (post_script.js):

$.ajax({
    method: 'POST',
    url: './home',
    data: {
        userID: 76,
        userName: 'Jimmy'
     },
});

注意,这个文件保存在 laravel 结构中的assets/js 目录下。这是我在路由文件中的内容 (routes.php):

Route::get('/', "MyController@home");
Route::get('home', "MyController@home");

这是我在MyController.php 文件中的功能:

function home(Request $request) {
    $userID = $request['userID'];
    $userName = $request['userName'];
    return view('home', [
      'userID'=> $userID,
      'userName' => $userName
    ]);
}

在我看来,我尝试这样访问它:

<p>User ID: {{$userID}}</p>
<p>User Name: {{$username}}</p>

什么都没有显示!请问我做错了什么?我需要你的帮助。如果我的问题不恰当,请原谅我,但我希望你明白我的意思。谢谢

【问题讨论】:

  • 您是否能够确认数据确实已发布到所需的路线?例如,在您的浏览器控制台中,您在发布数据时会获得哪个 HTTP 响应代码?您是否尝试过将$request 的内容直接转储到您的控制器中?

标签: javascript php ajax laravel-5.2


【解决方案1】:

您的 AJAX 正在 POST,但您没有设置 POST 路由,只有 GET。添加 POST 路由,如下所示:

Route::post('home', "MyController@home");

【讨论】:

    【解决方案2】:

    首先使用您的开发人员/网络工具(例如 firebug)检查您的 ajax 调用是否到达所需的控制器/函数以及参数是否正确转发。

    在 Laravel 环境中的 ajax 调用中指定 Url 的一种安全方法是使用 URL 外观,如下所示:

    url: "{{ URL::to('home'); }}",
    

    但是,为了这样做,您必须将您的 js 存储为 myscript.blade.php (!!) 文件并相应地@include 到您的视图中。

    为了在控制器函数中接收您发布的参数,无需声明函数参数,您可以简单地使用 Input::Get() 函数,例如。像这样:

    public function home()
    {
      $userID = Input::Get('userID');
      $userName = Input::Get('userName');
      return view('home', [ 'userID'=> $userID, 'userName' => $userName ]);
    }
    

    【讨论】:

      【解决方案3】:

      如果您尝试执行 POST 请求,您可能需要X-CSRF-Token

      将此添加到元:

      <meta name="csrf-token" content="{{ csrf_token() }}">
      

      并设置您的 AJAX:

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

      在 Laravel 文档中:https://laravel.com/docs/5.2/routing#csrf-x-csrf-token

      【讨论】:

        【解决方案4】:

        首先你需要为这样的 ajax 请求设置 dataType(如果你使用 jQuery)

         $.ajax({
            method: 'POST',
            url: './home',
            dataType: 'json'
            data: {
                userID: 76,
                userName: 'Jimmy'
             },
        })
        

        然后尝试按如下方式使用到您的控制器中

        Request::json()
        

        看看结果

        你也可以使用 Input::get() :

        Request::get('userID')
        

        【讨论】:

          【解决方案5】:

          您可以使用路由名称将数据传递给控制器​​

           $.ajaxSetup({
                      headers:{'X-CSRF-TOKEN': $("meta[name='csrf-token']").attr('content')}
                  });
                  $.ajax({
                      type:'POST',
                      url: '{{route("route_name_with_post_method")}}',
                      data:{
                        'id': data
                      },
                      success:function(r){
          
                      },error:function(r) {
          
                      }
                  });
          

          【讨论】:

            猜你喜欢
            • 2019-06-28
            • 2016-01-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-07-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多