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

使用JavaScript调用GitHub API时的JSON解析及Ajax请求编码问题

解决GitHub API请求中application/x-www-form-urlencoded格式的JSON解析问题

看你给出的githubRequest函数,问题大概率出在发送application/x-www-form-urlencoded格式请求时,数据处理不符合GitHub API的解析要求。我给你两种解决方案,你可以根据需求选择:

方案一:正确处理application/x-www-form-urlencoded格式数据

GitHub API接收这种格式时,期望的是URL编码的键值对字符串,而非原始JSON对象或字符串。你可以用jQuery的$.param()方法把JavaScript对象转换成符合要求的格式:

function githubRequest(endpoint, method, body) { 
  var baseUri = "https://api.github.com"; 
  var fullUri = baseUri + endpoint; 

  // 处理请求数据:非GET请求且有body时,转成URL编码格式
  var requestData = null;
  if (method !== 'GET' && body) {
    requestData = $.param(body);
  }

  $.ajax({ 
    url: fullUri, 
    type: method, 
    data: requestData,
    // 显式设置Content-Type(jQuery默认会为x-www-form-urlencoded设置,但显式写更清晰)
    contentType: method !== 'GET' ? 'application/x-www-form-urlencoded; charset=UTF-8' : undefined,
    beforeSend: function(request) { 
      request.setRequestHeader("Authorization", "Bearer " + github_token); 
    },
    success: function(response) {
      console.log('请求成功:', response);
    },
    error: function(xhr, status, error) {
      // 增加错误日志,方便调试
      console.error('请求失败:', status, error);
      console.error('服务器响应:', xhr.responseText);
    }
  }); 
}

方案二:改用application/json格式(更推荐)

其实GitHub API的绝大多数端点都支持application/json格式,这种方式更直观,也不容易出解析问题。只需要把body转成JSON字符串,并设置对应的请求头:

function githubRequest(endpoint, method, body) { 
  var baseUri = "https://api.github.com"; 
  var fullUri = baseUri + endpoint; 

  var requestData = body ? JSON.stringify(body) : null;

  $.ajax({ 
    url: fullUri, 
    type: method, 
    data: requestData,
    contentType: method !== 'GET' ? 'application/json; charset=UTF-8' : undefined,
    beforeSend: function(request) { 
      request.setRequestHeader("Authorization", "Bearer " + github_token); 
    },
    success: function(response) {
      console.log('请求成功:', response);
    },
    error: function(xhr, status, error) {
      console.error('请求失败:', status, error);
      console.error('服务器响应:', xhr.responseText);
    }
  }); 
}

为什么之前会出问题?

如果直接把JSON对象或字符串作为data传递给$.ajax,当contentType是application/x-www-form-urlencoded时,jQuery不会自动把JSON转成URL编码格式,服务器收到不符合要求的数据,自然会触发JSON解析错误。

内容的提问来源于stack exchange,提问作者K Split X

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:35:21