如何使用Axios的GET方法携带请求体并获取数据?
问题
我编写了一段使用Axios的GET方法携带请求体发起API请求的代码,如下所示,请问如何通过该方式获取请求返回的数据?
const getSchool = async () => { const payload = { register: "1110000000000", id_tingkat_kelas: 11, list_id_produk: [ 1, 2, 3, 4, 5, 6, 7,8,9,10, 11, 13, 14, 15, 16 ] }; api.get(`${process.env.NEXT_PUBLIC_API_URL_ORIGIN}/mobile/v18/tobk/ujian-sekolah/all`, { headers: { "Content-Type": "application/json", "X-API-KEY": `${process.env.NEXT_PUBLIC_API_KEY}`, Authorization: "Bearer " + session?.user?.token, }, data: payload } ) .then((res) => { setDataLaporan(res?.data?.data); setIsLoading(false); }) .catch((err) => { }); };
解答
你当前的代码已经在正确获取返回数据了,不过可以优化得更严谨:
当前逻辑的合理性
你在.then()回调里通过res?.data?.data拿到返回数据并赋值给dataLaporan,这是Axios获取响应数据的标准方式——Axios会把服务器返回的响应体包装在res.data里,而你的后端接口又把业务数据放在了data字段下,所以res?.data?.data是正确的取值路径。可优化的细节
- 既然函数声明了
async,建议用try/catch/finally替代.then/.catch,代码可读性更强:const getSchool = async () => { const payload = { register: "1110000000000", id_tingkat_kelas: 11, list_id_produk: [1,2,3,4,5,6,7,8,9,10,11,13,14,15,16] }; try { setIsLoading(true); // 建议在请求开始时设置加载状态 const res = await api.get(`${process.env.NEXT_PUBLIC_API_URL_ORIGIN}/mobile/v18/tobk/ujian-sekolah/all`, { headers: { "Content-Type": "application/json", "X-API-KEY": `${process.env.NEXT_PUBLIC_API_KEY}`, Authorization: `Bearer ${session?.user?.token}` }, data: payload }); // 确认数据结构后取值,加判断避免异常 if (res?.data?.data) { setDataLaporan(res.data.data); } else { console.warn("接口返回数据格式异常", res.data); } } catch (err) { console.error("获取学校数据失败", err); // 可在这里添加用户可见的错误提示逻辑 } finally { // 无论请求成败都结束加载状态 setIsLoading(false); } }; - 注意:GET请求携带请求体不符合HTTP规范,部分服务器会拒绝这类请求,如果遇到请求失败,优先检查后端是否支持GET带body的方式,必要时换成POST请求。
- 既然函数声明了
调试技巧
如果不确定返回数据的结构,可以在回调或try块里先console.log(res.data)打印完整响应体,确认数据层级后再精准取值。
内容的提问来源于stack exchange,提问作者badriana badriana
相关产品推荐
相关产品推荐

