javascript - Axios PUT 适用于 Chrome 和 Firefox,但不适用于 Safari
问题描述
我正在尝试使用 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,结果相同。有谁知道我做错了什么?
解决方案
为将来遇到此问题的任何人找到了解决方案:我的端点 url 以 / 结尾。这使得 laravel 以 301 响应。之后数据在 safari 中消失了。请参阅https://stackoverflow.com/a/47209376/1292776 在 url 末尾删除了我的 / ,它适用于所有浏览器。
推荐阅读
- html - 如何在文本下显示日期选择器
- react-native - 在 React Native 的 Menu Drawer 中,drawerContentOptions 不起作用?
- swift - 不推荐使用 withUnsafeBytes:使用 `withUnsafeBytes
(_: (UnsafeRawBufferPointer) throws -> R) rethrows -> R` - python - 无法从 S3 存储桶读取 excel 文件
- android - 是否可以防止 kotlin 在实现的接口中更改函数中的参数名称?
- php - PHP将两个关联数组组合成一个多维关联数组的有效方法
- powerbi - Power BI 或 Excel 2019 Power Query 未连接到“BOE”网页
- php - 如何在PHP的twilio中同时从多个呼叫者号码拨打多个号码
- node.js - Express、Socket.io 和 Nginx 的 CORS 问题
- android - 找不到导航对象。您的组件是否在导航器的屏幕内?