POST-запрос 400 Bad Request в background.js расширения Chrome для gmail

Создание расширения Chrome, попытка создать новую метку с помощью метода users.labels:create. Я успешно восстановил доступ, разрешения, которые, по моему мнению, установлены надлежащим образом, но я все еще получаю 400, и в противном случае я не могу найти ничего другого по этому вопросу, хотя я подозреваю, что упускаю что-то довольно очевидное.

(Если мой код не дает его, это мой первый веб-проект, поэтому любая помощь искренне приветствуется, и я благодарен за ваше время.)

background.js

var postRequestUrl = "https://www.googleapis.com/gmail/v1/users/me/labels?access_token=" + accessToken;



$.ajax({
              url: postRequestUrl,
              method: "POST",
              contentType: "application/json",
              data: {
                name: "posting test label",
                labelListVisibility: "labelShow",
                messageListVisibility: "show"
              }
            }).done(function(msg){
              alert("Success?")
            })

manifest.json

{
  "manifest_version": 2,
  "key": "redacted>",
  "name": "<redacted>",
  "description": "Description",
  "version": "0.0.2.0",
  "default locale": "en",
  "icons": { "128": "imgs/pledge_pin.png"},
  "content_scripts" : [
    {
      "matches": ["*://mail.google.com/mail/*"],
      "js": ["js/jquery.js", "js/compose.js", "bower_components/jqnotifybar/jquery.notifyBar.js"],
      "css": ["css/stylesheet.css", "bower_components/jqnotifybar/css/jquery.notifyBar.css"]
    }
  ],
  "background": {
    "scripts": ["scripts/background.js", "js/jquery.js"]
  },
  "permissions": [
    "identity",
    "https://www.googleapis.com/*"
  ],
  "oauth2": {
    "client_id": "<redacted>",
    "scopes": ["https://www.googleapis.com/auth/gmail.modify", "https://www.googleapis.com/auth/gmail.labels"]
  }
}

Полное сообщение об ошибке

POST https://www.googleapis.com/gmail/v1/users/me/labels?access_token=<token redacted> 400 (Bad Request)

    n.ajaxTransport.k.cors.a.crossDomain.send   @   jquery.js:4
n.extend.ajax   @   jquery.js:4
(anonymous function)    @   background.js:106
propertyNames.forEach.target.(anonymous function)   @   extensions::SafeBuiltins:19
EventImpl.dispatchToListener    @   extensions::event_bindings:395
propertyNames.forEach.target.(anonymous function)   @   extensions::SafeBuiltins:19
$Array.forEach.publicClass.(anonymous function) @   extensions::utils:94
EventImpl.dispatch_ @   extensions::event_bindings:379
EventImpl.dispatch  @   extensions::event_bindings:401
propertyNames.forEach.target.(anonymous function)   @   extensions::SafeBuiltins:19
$Array.forEach.publicClass.(anonymous function) @   extensions::utils:94
messageListener @   extensions::messaging:188
propertyNames.forEach.target.(anonymous function)   @   extensions::SafeBuiltins:19
EventImpl.dispatchToListener    @   extensions::event_bindings:395
propertyNames.forEach.target.(anonymous function)   @   extensions::SafeBuiltins:19
$Array.forEach.publicClass.(anonymous function) @   extensions::utils:94
EventImpl.dispatch_ @   extensions::event_bindings:379
EventImpl.dispatch  @   extensions::event_bindings:401
propertyNames.forEach.target.(anonymous function)   @   extensions::SafeBuiltins:19
$Array.forEach.publicClass.(anonymous function) @   extensions::utils:94
dispatchOnMessage   @   extensions::messaging:316

2 ответа

Решение

Вы забыли указать тип содержимого полезной нагрузки вашего запроса, в данном случае JSON. application/json сделает свое дело. Также, userId: "me" не требуется в полезной нагрузке запроса, и вы должны систематизировать свои данные.

$.ajax({
  url: "https://www.googleapis.com/gmail/v1/users/me/labels?access_token={YOUR_API_KEY}",
  method: "POST",
  contentType: "application/json", // Content type has to be specified.
  data: JSON.stringify({           // You have to stringify your data.
    name: "Example",               // userId: "me" is not needed.
    labelListVisibility: "labelShow",
    messageListVisibility: "show"
  }),
  success: function(msg){
    alert(JSON.stringify(msg));
  },
  error: function(msg){
    alert(JSON.stringify(msg));
  }
});

В вашем запросе есть опечатка. Обновите как ниже:

var postRequestUrl = "https://www.googleapis.com/gmail/v1/users/me/labels?access_token=" + accessToken;
Другие вопросы по тегам