如何通过AJAX将JS二维数组传入Laravel控制器?
解决JS二维数组通过AJAX传入Laravel控制器的问题
嘿,我来帮你搞定这个问题~其实实现起来很简单,分两种常用的方案,根据你的需求选就行:
方案一:用POST请求(推荐,适合复杂/大数据组)
POST请求没有URL长度限制,更适合传递二维数组这类复杂数据,步骤如下:
1. 修改你的JS代码
调整AJAX的请求类型、内容类型,把数组转成JSON字符串传递,同时确保CSRF头正确:
$("#sendData").click(function() { // 注意CSRF头的键要和Laravel默认一致:X-CSRF-TOKEN $.ajaxSetup({ headers: { 'X-CSRF-TOKEN' : '{{ csrf_token() }}' } }); $.ajax({ type: "POST", // 改成POST url: "/orders/example", dataType: "json", contentType: "application/json", // 告诉后端我们传的是JSON格式 data: JSON.stringify({ request: linePosition }), // 把二维数组转成JSON字符串 }).done(function(msg){ console.log("成功接收返回:", msg) }).fail(function(msg) { console.log("请求失败:", msg) }); });
2. 控制器里接收数据
在你的ProductController的example方法里,用$request->json()来解析JSON数据:
use Illuminate\Http\Request; public function example(Request $request) { // 获取二维数组 $twoDArray = $request->json('request'); // 这里可以写你的业务逻辑,比如打印看看数组结构 // dd($twoDArray); // 返回响应给前端 return response()->json([ 'status' => 'success', 'received_data' => $twoDArray ]); }
3. 配置路由
在routes/web.php里添加POST路由:
use App\Http\Controllers\ProductController; Route::post('/orders/example', [ProductController::class, 'example']);
方案二:用GET请求(适合小数据量数组)
如果你的二维数组内容不多,也可以用GET请求,jQuery会自动帮你序列化数组:
1. 调整JS代码
只需要确保CSRF头正确,直接传递数组即可:
$("#sendData").click(function() { $.ajaxSetup({ headers: { 'X-CSRF-TOKEN' : '{{ csrf_token() }}' } }); $.ajax({ type: "GET", url: "/orders/example", dataType: "json", data: { request: linePosition }, // 直接传二维数组,jQuery会自动序列化 }).done(function(msg){ console.log("成功接收返回:", msg) }).fail(function(msg) { console.log("请求失败:", msg) }); });
2. 控制器里接收数据
直接用$request->input()就能拿到二维数组:
use Illuminate\Http\Request; public function example(Request $request) { $twoDArray = $request->input('request'); // 业务逻辑... return response()->json([ 'status' => 'success', 'received_data' => $twoDArray ]); }
3. 配置路由
在routes/web.php里添加GET路由:
use App\Http\Controllers\ProductController; Route::get('/orders/example', [ProductController::class, 'example']);
注意事项
- CSRF验证:一定要确保AJAX请求里带了正确的
X-CSRF-TOKEN头,否则Laravel会拒绝请求。 - 数组大小:GET请求有URL长度限制,如果二维数组内容很多,优先选POST方案。
- 调试:如果遇到问题,可以在控制器里用
dd($twoDArray)打印接收的数组,或者在前端控制台看请求的参数是否正确。
内容的提问来源于stack exchange,提问作者sincorchetes
相关产品推荐
相关产品推荐

