解析JSON的问题 - 作为application / x-www-form-urlencoded发送的ajax请求

时间:2018-04-29 20:58:42

标签: 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/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_token在另一个文件中定义。

现在我正在使用PUT方法对此进行测试,我正在尝试在我的回购中创建一个文件。

在"创建文件"下的更多信息部分:https://developer.github.com/v3/repos/contents/

以下是我发送的body

{
    "message": "Added files",
    "committer": {
        "name": name,
        "email": email
    },
    "content": base_64_content
}

然后我打电话给我的功能。我尝试上传README.md文件作为示例。

在我的chrome控制台中,我看到两个请求(我假设一个是预检,一个是实际的)。预检一个成功,第二个不成功。

enter image description here

由于某种原因,在第二个请求中,请求有效负载如下:

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

那时我有两个问题。

首先,如果预检请求成功,为什么这个失败? 其次,为什么它作为非json发送。 Github的回应是

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

1 个答案:

答案 0 :(得分:1)

期望body被字符串化,因为它无法在ajax请求中发送对象。

data: JSON.stringify(body)代替data: body

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