javascript - 使用 Laravel 构建 API 仅在通过 javascript 调用时返回空对象......有时
问题描述
我正在使用 VueJS 和 Laravel 构建一个网页,在遇到这个问题之前一切正常。
首先,让我分享必要的代码:
<script>
axios.defaults.headers.common['Content-Type'] = 'application/json'
var app = new Vue({
el: '#app',
methods: {
getHotelsByCityName: async function () {
const resp = await axios.get('localhost/api/hotels');
console.log(resp);
}
},
})
</script>
发送请求的 Javascript 代码就这么简单,然后对于后端,我只需将数据编码为 JSON 格式并将其发送回客户端。
public function getHotels(Amadeus $amadeus,$destination)
{
$hotels = $amadeus->searchForHotelsByCityOrAirportName($destination);
return response()->json($hotels);
}
请注意,我有时会得到数据,有时会得到空对象,事实上,如果我打开网页并继续刷新它,有时我会得到数据,有时我不会,我发现清除浏览器缓存会增加我获得正确数据的机会,所以它可能是一个缓存问题,但究竟缓存了什么?这里发生了什么?
我正在使用 Amadeus API,您知道,当我直接在浏览器中访问 API 链接时,它总是有效。所以后端似乎很好,不确定问题出在哪里。
编辑1:我注意到当我使用谷歌浏览器开发工具检查请求时,我得到一个空对象(有时再次),但是当我直接用浏览器点击API时,一切正常,我没有收到任何错误控制台,但我猜它可能是 headers 或 cookies 问题。如果有人可以提供帮助,我将不胜感激。
编辑2:我发现如果我等待几秒钟然后执行该方法一切正常,只有当我getHotelsByCityName
从mounted()function
或任何其他在页面加载后立即执行的方法调用时才会出现问题。
解决方案
按 F12 或 ctrl+shift+I 在浏览器上打开开发人员工具。并切换到network
面板查看浏览器发送的请求和服务器发送的结果。
我认为getHotelsByCityName()
应该在 Vue 中写入created
或mounted
部分以在页面加载时获取数据。
推荐阅读
- python - 如何在特定值上过滤具有特定模式的特定条目?
- c# - C# - 在我的 MVC 项目中读取文件内存流时出现问题
- excel - 如何在表格中添加一行?
- java - Spring Repository:尽管更改了参数,但返回相同的结果列表
- r - 在 3d 内核密度中创建 %-contour 并找出该轮廓内的点
- python - Python Serializer 中的过滤条件
- c# - OrderBy 和 Distinct 从数据库到 Combobox
- c# - 如何使用 C# 中的 xml 解析器提取 xml 中节点的所有值?
- c++ - 拒绝任何非数字的 std::stoi 版本
- javascript - 将道具传递给类组件时返回未定义。传递给函数组件没有问题