Unexpected token'<, "<IDOCTYPE "... is not valid JSON

2026年06月11日 20:06 27.66 秒 success

错误信息

Unexpected token'<, "<IDOCTYPE "... is not valid JSON

AI 解决方案

🌐 错误翻译


原文:Unexpected token‘<’, “<!DOCTYPE … is not valid JSON
译文:遇到了意外的符号`<`,“<!DOCTYPE …不是有效的JSON。

🎯 原因分析


根本原因: 你试图解析的数据不是JSON格式,而是一个HTML文档(通常以<!DOCTYPE html>开头)。
具体场景: 这通常发生在使用 fetchaxios 或其他网络请求库调用API时,期望接收JSON响应,但服务器却返回了一个HTML页面(例如错误页面、登录页面或服务器错误的默认页面)。

💡 解决方案


  • 检查请求地址与方法

  • - 确认你请求的URL (/api/xxx) 是否正确。
    - 确认HTTP方法(GETPOST等)是否正确。

    • 检查服务器响应

    • - 在浏览器开发者工具(F12 -> Network 选项卡)中查看具体的网络请求。
      - 点击该请求,在 Response 标签页查看服务器返回的实际内容。这通常是HTML,能帮你定位是哪个页面被返回了。

      • 检查请求头

      • - 确保请求头中包含了正确的 Accept: application/jsonContent-Type: application/json(对于POST/PUT请求),告知服务器你需要JSON数据。
            // 示例:使用正确的请求头
            fetch('/api/data', {
              headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json' // 如果是发送JSON数据
              }
            })
            .then(response => {
              // 先检查响应状态是否成功
              if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
              }
              // 再解析JSON
              return response.json();
            })
            .then(data => console.log(data))
            .catch(error => console.error('Fetch error:', error));
            

        • 添加健壮的错误处理

        • - 在调用 .json() 之前,先检查 response.okContent-Type 响应头。
              fetch('/api/data')
                .then(response => {
                  // 检查响应状态码(200-299为成功)
                  if (!response.ok) {
                    throw new Error(`请求失败,状态码: ${response.status}`);
                  }
                  // 检查内容类型是否为JSON
                  const contentType = response.headers.get('content-type');
                  if (!contentType || !contentType.includes('application/json')) {
                    throw new Error(`服务器未返回JSON,而是返回了: ${contentType}`);
                  }
                  return response.json();
                })
                .catch(error => {
                  console.error('处理请求时出错:', error);
                  // 在这里处理错误,例如向用户显示友好提示
                });
              

          🛡️ 预防措施


        • 统一使用工具函数:封装一个通用的请求函数,内置上述的错误检查(状态码、内容类型)和JSON解析逻辑,避免重复编写。

        • 接口文档与测试:与后端开发人员确认API的准确地址、请求方法、参数和返回格式。使用Postman或Apifox等工具单独测试接口,确保其按预期工作。