如何使用 axios 将数组从 javascript 传递到 laravel 控制器
Posted
技术标签:
【中文标题】如何使用 axios 将数组从 javascript 传递到 laravel 控制器【英文标题】:How to pass arrays from javascript to laravel controller using axios 【发布时间】:2017-10-26 19:20:43 【问题描述】:我正在使用 Laravel 5.4,我正在使用 Vue 2 处理我的数据。我正在尝试使用 axios 调用控制器方法,但我找不到传递两个数组的正确方法。我需要将它们发送到我的控制器,以便向它们发出一些数据库请求并取回一些数据。
我已经设法将数组作为字符串传递,如下所示,但是,我不希望在我的控制器上将字符串转换为数组。
是否有一种方法可以做与我在下面做的相同的事情,但将数组作为数组而不是字符串传递,或者这是不可能的?
Vue 上的 Axios 调用:
$rutas = ["01", "02"];
$tipos = ["01", "03", "04"];
var params = new URLSearchParams();
params.append("rutas", $rutas);
params.append("tipos", $tipos);
var request =
params: params
;
axios.get('/test/', request);
这是我的路线
Route::get('/test/', 'TestsController@getClientesPorRuta');
这是我的控制器的方法:
public function getClientesPorRuta(Request $request)
$rutas = $request->input('rutas');
$tipos = $request->input('tipos');
// Code like this doesn't work
$index = 0;
$register = Ruta::where('CODIRUTA','=',$rutas[$index])->first();
【问题讨论】:
你真的做到了.. 【参考方案1】:实际上,您不必将该数组转换为字符串即可执行此操作..您可以直接传递它..
var request =
rutas: $rutas,
tipos: $tipos,
;
axios.post('/test/', request);
使用 axios.post 而不是 axios.get .. 因为 get 方法是使用 url 来传递数据 .. 并且 url 不能包含数组,它会将其转换为像 1,2 这样的字符串
在您的路线中,您也应该将 Route::get 更改为 Route::post
Route::post('/test/', 'TestsController@getClientesPorRuta');
那么在你的 php 中 $request->rutas
已经设置为 ["01", "02"]
【讨论】:
我的错,axios 调用将数组转换为字符串。但是,如果我想随意使用它,我必须将它转换为数组:$register = Ruta::where('CODIRUTA','=',$rutas[$index])->first();
。我仍然需要将它作为数组而不是字符串传递。当然,我可以转换它,但我想知道它是否可能。
因为你的 rutas 在我的回答中是一个数组 .. 你可以使用 $register = Ruta::whereIn('CODIRUTA',$rutas)->first();
检索一个 Ruta
如果我使用数组 ["01", "02"]
运行该代码,我每次都会得到第一个,我不需要使用 id 数组 ($rutas) 进行查询。我需要循环 $rutas 并单独进行查询,以便每次都能得到不同的“ruta”。此外,$request->rutas
不返回数组["01", "02"]
,它返回一个字符串"01,02"
。不过感谢您的帮助。
这是因为你正在转换它.. 使用params.append("rutas", $rutas);
而不是params.append("rutas", $strRutas);
自从您发布答案后,我正在与params.append("rutas", $rutas);
合作。我没有转换它。以上是关于如何使用 axios 将数组从 javascript 传递到 laravel 控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 vuejs 中使用 axios 从数组中发布多个请求?
如何从我得到的数组中获取特定的数组元素作为调用 axios.get() 调用的函数的响应 [重复]
从 Axios 响应中解析 XML,推送到 Vue 数据数组
Axios Vue.js 将对象数组从 store.js 传递给组件