Javascript 解析JSON时出现问题--ajax请求以application/x-www-form-urlencoded的形式发送

Javascript 解析JSON时出现问题--ajax请求以application/x-www-form-urlencoded的形式发送,javascript,json,ajax,github,xmlhttprequest,Javascript,Json,Ajax,Github,Xmlhttprequest,我正在尝试使用javascript连接到github api。我有一个通用的github函数,可以调用github uri function githubRequest(endpoint, method, body) { // console.log(github_token); var baseUri = "https://api.github.com"; var fullUri = baseUri + endpoint; // endpoint is like /repos/us

我正在尝试使用javascript连接到github api。我有一个通用的github函数,可以调用github uri

function githubRequest(endpoint, method, body) {
  // console.log(github_token);
  var baseUri = "https://api.github.com";
  var fullUri = baseUri + endpoint; // endpoint is like /repos/username/repo/contents/path
  // set up the request
  $.ajax({
    url: fullUri,
    type: method,
    beforeSend: function(request) {
      request.setRequestHeader("Authorization", "Bearer " + github_token);
      request.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
    },
    data: body,
    success: function(data) {
      console.log("SUCCESS");
      alert("Filed added");
    },
    error: function(data) {
      console.log("ERROR");
      alert("Something went wrong ... check console");
    }
  });
}
github\u令牌
在另一个文件中定义

现在我正在使用一个
PUT
方法测试它,并且我正在尝试在我的repo上创建一个文件

更多信息请参见“创建文件”部分:

这是我随信发送的
正文

{
    "message": "Added files",
    "committer": {
        "name": name,
        "email": email
    },
    "content": base_64_content
}
然后我调用我的函数。我尝试上传一个
README.md
文件作为示例

在我的chrome控制台中,我看到两个请求(我假设一个是飞行前请求,另一个是实际请求)。飞行前的一个成功了,第二个没有

由于第二个请求中的某些原因,请求有效负载如下所示:

message=Added+files&committer%5Bname%5D=John+Doe&committer%5beail%5D=johndoe%40gmail.com&content=base64Content%3D
,其中
base64Content
是实际的base64内容

那么我有两个问题

首先,如果飞行前的请求成功了,为什么这次失败了? 其次,为什么它以非json的形式发送。Github的响应是

documentation_url:"https://developer.github.com/v3/repos/contents/#update-a-file"
message:"Problems parsing JSON"

它希望主体被字符串化,因为它不能在ajax请求中发送对象

data:JSON.stringify(body)
而不是
data:body


飞行前检查可能有效,因为消息的结构正常,但当它尝试解析json时失败。

它可能希望
正文
字符串化,因为它无法发送对象。飞行前检查可能有效,因为消息的结构正常,但当它尝试解析json时失败,您完全正确。当我将
data:body
更改为
data:JSON.stringify(body)
时,它成功了。谢谢我已经把这个贴了出来,你可以把它标记为正确的