将带有香草 Js 的数组从 Ajax 发送到 Laravel 控制器
Posted
技术标签:
【中文标题】将带有香草 Js 的数组从 Ajax 发送到 Laravel 控制器【英文标题】:Send array with vanilla Js from Ajax to Laravel controller 【发布时间】:2020-11-02 11:04:56 【问题描述】:我想用 vanilla JS 向我的 laravel 控制器发送一个包含元素的数组,(我不想使用 Jquery)。但我无法让它工作......我在网上找到了几个解决方案,试图制作一个 json 对象等等,但没有任何工作......
这是我的代码:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function ()
if(this.readyState == 4 && this.status == 200)
alert('sent');
;
xhttp.open("GET", 'route('profile.toggleCategory', $user)', true);
xhttp.send(categories);
和我的 laravel 控制器:
public function toggleCategory(Request $request, User $user)
dd($categories = $request->categories);
$user->categories()->sync(collect($categories));
【问题讨论】:
您在目标的哪个方面遇到问题?是否到达控制器,但数据不是您想要的格式? 当我执行“$request->categories”时得到“null”,所以我的控制器找不到 var 类别.. :/ 您的用户和类别表是什么样的,以及任何相关的数据透视表?两者的模型是什么样的,特别是关系的定义?直接使用 phpmyadmin 或者 sql pro 或者类似的工具,你在数据库中看到了什么数据? 【参考方案1】:我改变了一些东西,现在它可以工作了!
工作代码:
web.php:
Route::post('user/togglecategory', 'Site\ProfileController@toggleCategory')->name('toggleCategory');
javascript 代码:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function ()
if(this.readyState == 4 && this.status == 200)
alert('send');
;
xhttp.open("POST", 'route('profile.toggleCategory', $user)', true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.setRequestHeader("X-CSRF-TOKEN", document.head.querySelector("[name=csrf-token]").content );
xhttp.send("categories="+categories);
);
Laravel 控制器:
public function toggleCategory(Request $request, User $user)
$categories = explode(',', $request->categories);
$user->categories()->sync($categories);
【讨论】:
以上是关于将带有香草 Js 的数组从 Ajax 发送到 Laravel 控制器的主要内容,如果未能解决你的问题,请参考以下文章
text AJAX速成班(香草JS) - TraversyMedia
json AJAX速成班(香草JS) - TraversyMedia
Angular JS将带有$resource的数组数据发送到.NET API
如何使用 Ajax 以数组格式将多个图像从 MVC 视图发送到控制器?