如何使用 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 传递给组件

如何执行两个 Axios GET 请求,映射结果然后将其推送到数组?

Laravel VueJS Axios 将数组发送到控制器