You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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是正确的取值路径。

  • 可优化的细节

    1. 既然函数声明了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);
        }
      };
      
    2. 注意:GET请求携带请求体不符合HTTP规范,部分服务器会拒绝这类请求,如果遇到请求失败,优先检查后端是否支持GET带body的方式,必要时换成POST请求。
  • 调试技巧
    如果不确定返回数据的结构,可以在回调或try块里先console.log(res.data)打印完整响应体,确认数据层级后再精准取值。

内容的提问来源于stack exchange,提问作者badriana badriana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:27:27