【问题标题】:Problems parsing JSON -- ajax request sending as application/x-www-form-urlencoded解析 JSON 的问题 - 以 application/x-www-form-urlencoded 形式发送的 ajax 请求
【发布时间】:2018-10-10 00:01:51
【问题描述】:

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

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 方法对此进行测试,并且我正在尝试在我的 repo 上创建一个文件。

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

这是我发送的body。

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

然后我调用我的函数。我尝试上传一个README.md 文件作为示例。

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

第二次请求中由于某种原因,请求的payload如下:

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

那我有两个问题。

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

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

【问题讨论】:

  • 它可能期望 body 被字符串化,因为它无法发送对象。飞行前检查可能有效,因为消息的结构没问题,但是当它尝试解析 json 时失败
  • 你是绝对正确的。当我将data: body 更改为data: JSON.stringify(body) 时,它起作用了。谢谢
  • 我已将此作为答案发布,因此您可以将其标记为正确

标签: javascript json ajax github xmlhttprequest


【解决方案1】:

期望正文被字符串化,因为它不能在 ajax 请求中发送对象。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 2017-09-11
    相关资源
    最近更新 更多