【发布时间】:2019-01-26 00:00:50
【问题描述】:
我正在尝试使用 Laravel (5.4) API 将 (PUT) 数据发送到我的后端。在 Chrome、Firefox 和 Postman 中一切正常,但在 Safari 和 Internet Explorer(11) 中却不行。我在 Vue 组件中使用 Axios 来处理请求:
axios.put(url, params)
.then((resp) => {
this.getScheduleFromDB();
this.notice = this.generic.preferencesaved;
setTimeout(() => {
this.notice = '';
}, 2000);
})
.catch((error) => {
this.errormessage = "error saving prefered schedule";
this.scheduleChanged = false;
});
在 Safari 开发工具 (mac) 中,我看到数据作为有效负载附加到请求中:
{
"accesstoken": "myaccesstoken",
"schedule": {
"monday": [
{
"blocked": true
}
],
"tuesday": [],
"wednesday": [],
"thursday": [],
"friday": [],
"saturday": [],
"sunday": [
{
"blocked": true
}
]
}
}
但是,在 laravel 中,$request 是完全空的(虽然调用了控制器函数,但我在其中放置了一些日志记录)。
我添加了一个 Request 对象以使其更加直观。它有这些规则:
public function rules() {
return [
"accesstoken" => "required",
"schedule" => "required"
];
}
所以现在 Safari 中的响应是:
{
"accesstoken": [
"The accesstoken field is mandatory."
],
"schedule": [
"The schedule field is mandatory."
]
}
在 Chrome 和 Firefox 中,响应是状态码 200,并且数据库已更新。
我尝试用 jQuery $.ajax 替换 axios。它具有完全相同的结果。 Laravel 似乎不允许来自 Safari 和 Internet Explorer 的 PUT 请求有效负载,但它确实允许来自 Chrome、Firefox 和 Postman 的 PUT 请求负载。我尝试将方法更改为 POST,结果相同。有谁知道我做错了什么?
【问题讨论】:
标签: javascript laravel-5 xmlhttprequest axios