如何通过post方法从ajax传递数据到laravel 5.2控制器

7

你好,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的内容吗? - alexw
5个回答

10

你的AJAX正在进行POST请求,但是你没有设置POST路由,只有GET。添加一个POST路由,像这样:

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

3

首先,使用开发者/网络工具(例如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 ]);
}

1
如果您尝试进行POST请求,则可能需要具有X-CSRF-Token。请将其添加到meta标签中:
<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

0

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

 $.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) {

            }
        });

0

首先,您需要设置ajax请求的dataType,如下所示(如果您使用jQuery)

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

然后尝试将其用作控制器,如下所示

Request::json()

并查看结果

您还可以使用Input::get():

Request::get('userID')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接