Meteor Jira POST电话

时间:2015-10-23 06:19:43

标签: angularjs post meteor jira jira-rest-api

我试图通过POST调用来调整Jira中问题的转换(状态)。我正在运行带有Meteor后端和Angular前端的Meteor应用程序。

Meteor.methods({
performPostCall: function(id, status){
    var transitionObject = {
        "transition": {
            "id": "11"
        }
    }; 
    var result = HTTP.call('POST', 'https://privateurl/rest/api/2/issue/' + id + '/transitions', 
        {data: transitionObject}, 
        {headers :{
            'Access-Control-Allow-Origin': '*',
            'Authorization': 'Basic ******',
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        }});

    return result;
}
});

在我的前端,我调用meteor方法并像这样处理回调:

Meteor.call('performPostCall', id, status, function(error, success){
                if(error){
                    alert(error);
                } else {
                    alert(success);
                }
            });

当我按下触发流星方法调用的按钮时,会出现这个奇怪而可爱的错误:

XMLHttpRequest cannot load https://ddp--0266-remoteserverurl/sockjs/info?cb=4bxmv_smgg. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'remoteserverurl' is therefore not allowed access. The response had HTTP status code 503.

但是我宣布了这个' Access-Control-Allow-Origin'在标题中,所以我不明白它为什么抱怨。谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:0)

根据documentation,第三个参数应该是一个包含调用所需字段的对象,代码dataheaders是不同的对象。

正确的语法是:

HTTP.call('POST', 'https://privateurl/rest/api/2/issue/' + id + '/transitions', {
  data: transitionObject, 
  headers :{
    'Access-Control-Allow-Origin': '*',
    'Authorization': 'Basic ******',
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }});

此外,结果变量很可能未定义,因为您尝试以同步方式执行,POST调用是异步的,使用第四个参数(回调)将数据传递给客户端,如:

HTTP.call('POST', 'https://privateurl/rest/api/2/issue/' + id + '/transitions', {
  data: transitionObject, 
  headers :{
    'Access-Control-Allow-Origin': '*',
    'Authorization': 'Basic ******',
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }}, function (error, result) {
    if (!error) {
      return result;
    }
  });