【问题标题】:Send PUT from pure Javascript to Laravel controller将 PUT 从纯 Javascript 发送到 Laravel 控制器
【发布时间】:2018-05-12 06:50:15
【问题描述】:

我尝试通过 PUT 方法发送数据,但 Laravel 5.5 在目标控制器的输入(或请求)中看不到任何数据。

这里是JS:

    function selectProject(option){

        console.log('Update selected');

        var data = new Object();
        data.project_id = option.value;
        data.user_id ={{auth()->user()->id}};
        console.log(data);

        var url = "/admin/projects";
        var xhr = new XMLHttpRequest();

        xhr.open("PUT", url+'/update_selected', true);
        xhr.setRequestHeader("X-CSRF-TOKEN", "{{ csrf_token() }}");
        xhr.onload = function () {
                var response = xhr.responseText;
                if (xhr.readyState == 4 && xhr.status == "200") {
                        console.log(response);
                        document.getElementById("app").innerHTML = response; 
                } else {
                        console.log(response);
                        document.getElementById("app").innerHTML = response; 
                }
        }
        xhr.send(data);
    }

在 Laravel 控制器中,我尝试显示输入:

    echo '[Controller]Inputs:';
    return Input::all();

console.log 的输出:

Update selected
{…}
 project_id: "4"
 user_id: 1
 __proto__: Object { … }
[Controller]Inputs:[]

问题:我做错了什么,输入数据在哪里? p.s.我只能使用纯 javascript,不能使用 jQuery 或其他。

【问题讨论】:

  • 我会猜测 laravel 期望您的数据在 url 编码的名称/值对中,而不是在 javascript 对象中。尝试var data = 'project_id=' + encodeURIComponent(option.value) +"&user_id=" + encodeURIComponent({{auth()->user()->id}}); 并发送。
  • 控制器中仍然没有数据...

标签: javascript ajax laravel laravel-5


【解决方案1】:

通过添加标题解决了问题:

xhr.setRequestHeader("content-type", "application/json");

并将数据包装成 JSON:

xhr.send(JSON.stringify(data));

【讨论】:

    猜你喜欢
    • 2019-07-25
    • 2016-11-24
    • 2015-06-25
    • 2018-01-13
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    相关资源
    最近更新 更多