Проблемы с синтаксическим анализом JSON - отправка ajax-запроса как application / x-www-form-urlencoded - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь подключиться к API GitHub с помощью JavaScript. У меня есть общая функция 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 - фактическое содержание base 64.

У меня есть два вопроса.

Во-первых, если предварительный запрос был успешным, почему этот запрос не прошел? Во-вторых, почему это отправка как не JSON. Github отвечает

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

1 Ответ

0 голосов
/ 30 апреля 2018

Ожидается, что тело будет структурировано, потому что не может отправить объект в запросе ajax.

data: JSON.stringify(body) вместо data: body

Предполетная проверка, вероятно, работает, потому что структура сообщения в порядке, но когда он пытается проанализировать json, он терпит неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...