如何通过 post 方法将数据从 ajax 传递到 laravel 5.2 控制器
Posted
技术标签:
【中文标题】如何通过 post 方法将数据从 ajax 传递到 laravel 5.2 控制器【英文标题】:How to pass data from ajax to laravel 5.2 controller via post method 【发布时间】:2016-07-09 20:37:16 【问题描述】:你好 *** 家族。这是我的第一个问题,希望能得到帮助。
我是 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
的内容直接转储到您的控制器中?
【参考方案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)
);
【讨论】:
以上是关于如何通过 post 方法将数据从 ajax 传递到 laravel 5.2 控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何将图像文件和表单数据从 Ajax 传递到 MVC 控制器
将 KnockoutJS 可观察数组传递给 HTTP Post 控制器方法的 AJax 调用失败