将PUT从纯Javascript发送到Laravel控制器

时间:2017-11-28 17:49:45

标签: javascript ajax laravel laravel-5

我尝试通过PUT方法发送数据,但是Laravel 5.5在目标控制器上的Input(或Request)中没有看到任何数据。

这里是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:[]

问题:我做错了什么,输入数据在哪里? 附:我只能使用纯javascript,没有jQuery或者其他。

1 个答案:

答案 0 :(得分:0)

通过添加标题解决问题:

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

并将数据包装到JSON:

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