我试图通过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'在标题中,所以我不明白它为什么抱怨。谁能告诉我我做错了什么?
答案 0 :(得分:0)
根据documentation,第三个参数应该是一个包含调用所需字段的对象,代码data
和headers
是不同的对象。
正确的语法是:
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;
}
});