使用iron-ajax向Github发布一个问题

时间:2015-10-16 23:44:39

标签: javascript ajax polymer github-api

即使我发现一些文章与我的问题相似,但没有答案解决了我的问题:

我希望每个(匿名)用户都允许向Github发布问题。正如我已经使用Polymer和Webcomponents开发的那样,我想使用<iron-ajax>这样做,所以我有<iron-ajax>元素:

<iron-ajax
  id="githubIssues"
  url="https://api.github.com/repos/IchordeDionysos/social-contacts/issues"
  method="POST"
  params='{"access_token": "efd925cc3c8d593b720f0d6a88f3c36f593e063a"}'
  body="[[params]]"
  verbose
  handle-as="json"
  on-response="showSuccess">

</iron-ajax>

我定义了这样的params属性:

params: {
  notify: true,
  type: Object,
  value: {
    "title": "",
    "body": "",
    "assignee": "IchordeDionysos",
    "labels": ["0 - Backlog"]
  }
}

最后我有一个按钮,它调用了一个函数来发布问题,在这个函数中,如果检查了它们,我会检查几个<paper-checkboxes>,如果我将更多标签推送到params:

submitIssue: function() {
    if (this.$.bug.checked) {
      this.push('params.labels', 'bug');
    };
    if (this.$.help.checked) {
      this.push('params.labels', 'help');
    };
    if (this.$.question.checked) {
      this.push('params.labels', 'question');
    };
    if (this.$.feature.checked) {
      this.push('params.labels', 'feature');
    };
    if (this.$.enhancement.checked) {
      this.push('params.labels', 'enhancement');
    };
    if (this.$.design.checked) {
      this.push('params.labels', 'design');
    };
    console.log(this.params);
    this.$.githubIssues.generateRequest();
}

但是当我尝试发布问题时,我得到400 (Bad Request)

我如何解决这个以及我必须向我的令牌授予哪些范围?

编辑:以下是我的请求标题和正文的外观:http://requestb.in/11y0i0x1?inspect

编辑:发送到正文的[object Object]如下所示:

{title: "dsggsdf", 
 body: "sdfgsdfsdf", 
 assignee: "IchordeDionysos", 
 labels: Array[3]}

和标签数组:

labels: Array[3]
  0: "0 - Backlog"
  1: "help"
  2: "question"

将对象记录到Chrome控制台时

2 个答案:

答案 0 :(得分:0)

只需将属性content-type="application/json"添加到您的iron-ajax属性中即可!

如果没有content-type - 属性,ajax会将body - 属性中提供的数据作为字符串发送,而不是像发布到Github上的json对象一样发送!

答案 1 :(得分:0)

您必须添加属性contentType="application/json"

像这样:

<iron-ajax
  id="githubIssues"
  url="https://api.github.com/repos/IchordeDionysos/social-contacts/issues"
  method="POST"
  params='{"access_token": "efd925cc3c8d593b720f0d6a88f3c36f593e063a"}'
  body="[[params]]"
  verbose
  handle-as="json"
  on-response="showSuccess"
  contentType="application/json">    
</iron-ajax>

我希望这有效;)