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

如何处理XMLHttpRequest返回的两种格式HTTP响应结果?

解决XMLHttpRequest响应字符串的动态解析问题

问题核心:当responseText是普通字符串(如"akduchkqlpouelqw")时,直接调用JSON.parse()会抛出语法错误,导致后续的类型判断代码根本不会执行,自然进不了typeof objToken === 'string'分支。

解决方案:用try-catch包裹JSON解析逻辑

通过捕获解析失败的异常,区分两种响应类型:

  • 解析成功:说明是JSON格式字符串,处理解析后的对象
  • 解析失败:说明是普通字符串,直接处理原responseText

修改后的代码如下:

var xhr = new XMLHttpRequest();

xhr.addEventListener("readystatechange", function() {
    if(this.readyState === 4) {
        if(this.responseText.length > 0) {
            const textToken = this.responseText;
            let parsedResult;
            
            try {
                // 尝试解析为JSON
                parsedResult = JSON.parse(textToken);
                
                // 解析成功,处理对象类型(排除null,因为typeof null返回'object')
                if(typeof parsedResult === 'object' && parsedResult !== null) {
                    // 你的对象处理逻辑
                }
            } catch (e) {
                // 解析失败,说明是普通字符串
                // 你的普通字符串处理逻辑
            }
        } else {
            // 空响应处理逻辑
        }
    }
});

补充场景处理

如果你的普通字符串有可能是带双引号的合法JSON字符串(如"\"valid-string\""),解析后会得到字符串类型,这时候可以在try块里再增加一层判断:

try {
    parsedResult = JSON.parse(textToken);
    if(typeof parsedResult === 'object' && parsedResult !== null) {
        // 处理JSON对象
    } else if(typeof parsedResult === 'string') {
        // 处理解析后得到的合法字符串类型
    }
} catch (e) {
    // 处理无法解析的纯普通字符串
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:50:26