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

浏览器中解析XHR请求的MIME类型:是否有对应解析函数?

解析XHR请求数据的原生方法

浏览器没有统一的原生函数能自动根据Content-Type头解析你提到的三种类型的数据,但针对每种MIME类型,都有对应的原生API或简便处理方式:

1. application/json

直接使用JSON.parse()解析即可,前提是请求数据为合法的JSON格式。若数据格式不合法,该方法会抛出错误,建议用try-catch包裹处理:

try {
  const parsedData = JSON.parse(requestData);
} catch (err) {
  console.error('JSON解析失败:', err);
}

2. application/x-www-form-urlencoded

利用浏览器原生的URLSearchParams接口,传入表单数据字符串即可解析为键值对结构,还能轻松转换为普通对象:

const params = new URLSearchParams(formDataStr);
// 转换为普通对象
const parsedData = Object.fromEntries(params.entries());

3. text/plain

这类数据本身就是纯文本格式,无需特殊解析,直接使用原始字符串即可。如果文本包含自定义格式(比如特定分隔符的键值对),则需要自行编写逻辑处理。

结合XHR代理的示例代码

// 代理XHR的send方法
const originalSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(data) {
  const contentType = this.getRequestHeader('Content-Type') || '';
  let parsedData = null;

  if (data) {
    if (contentType.includes('application/json')) {
      try {
        parsedData = JSON.parse(data);
      } catch (e) {
        console.error('JSON解析失败:', e);
        parsedData = data;
      }
    } else if (contentType.includes('application/x-www-form-urlencoded')) {
      const params = new URLSearchParams(data);
      parsedData = Object.fromEntries(params.entries());
    } else if (contentType.includes('text/plain')) {
      parsedData = data;
    }
  }

  console.log('解析后的请求数据:', parsedData);
  originalSend.call(this, data);
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:27:09