将带有香草 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 视图发送到控制器?

将数据从 javascript forEach 循环中的 php 数组发送到 ajax 调用的 url

如何使用ajax将数据从视图发送到控制器laravel?