我正在尝试使用Ajax访问azure-devops数据。下面是我的工作代码。
$.ajax({
url: 'https://dev.azure.com/ORG/products/_apis/wit/workitems/2065741?$expand=all&api-version=5.1',
dataType: 'json',
headers: {
'Authorization': 'Basic ' + btoa("" + ":" + 'XXXX')
}
}).done(function( results ) {
});
在我需要使用WQIL访问数据之后,但是它给出了意外的令牌错误。我要访问WorkItem和用户活动。你能帮忙吗?
$.ajax({
url: 'https://dev.azure.com/ORG/products/_apis/wit/wiql?api-version=5.1 ',
dataType: 'json',
headers: {
'Authorization': 'Basic ' + btoa("" + ":" + 'XXXX')
},
JSON.Stringfy("QUERY":"SELECT [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags] FROM workitemLinks WHERE " +
"( [Source].[System.TeamProject] = @project AND [Source].[System.WorkItemType] = 'User Story' ) AND ( [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward' ) "+
" AND ( [Target].[System.TeamProject] = @project AND [Target].[System.WorkItemType] = 'Task' ) ORDER BY [System.Id] MODE (MustContain)")
}).done(function( results ) {
x=results
});
答案 0 :(得分:1)
您之前使用的脚本是用于执行API的方法,但不适合用于执行WIQL脚本。这就是为什么您遇到该错误。
在WIQL
中执行Ajax
实际上是一个请求过程:将wiql
语句发送到您要访问的服务器,请求执行查询语句(Wiql),并返回执行结果。。因此,这是一个请求执行Post
命令的过程。但是在您的脚本中,它没有告诉服务器需要执行哪些指令。
以下是简单的示例,您可以参考将WIQL
与Ajax
一起使用:
<script type="text/javascript">
$(document).ready(function () {
$("#SelectWIT").on("click", function () {
var d = { "query": " Select [System.Id] from WorkItems Where [System.WorkItemType] = 'Bug' "};
$.ajax({
type: 'POST',
url: 'https://dev.azure.com/{org name}/{project name}/_apis/wit/wiql?api-version=1.0',
contentType: 'application/json',
data: JSON.stringify(d),
cache: false,
dataType: 'json',
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + btoa("" + ":" + "{PAT token}"));
},
}).done(function (data) {
var items = [];
$.each(data.workItems, function (key, val) {
items.push("<li> <a href='" + val.url + "'>" + val.id + "</a></li>");
});
$("<ul/>", {
html: items.join("")
}).appendTo("body");
}).error(function (e) {
var s = "error error error";
});
})
});
</script>
我的脚本的逻辑是请求运行带有 WIQL 语句作为请求正文的API,并将此请求发送到我要访问的项目。然后将使用js
语法的响应数据显示到页面主体中。这是输出:
由于我不确定您的下一个操作是什么。您可以在此脚本中用自己的替换Wiql语句和Url。然后更改相应的完成功能以实现所需的功能。
答案 1 :(得分:0)
WQIL以某种方式给出错误400,看起来像是权限问题。
所以我用另一种方式解决了它。除了查询之外,还有另一种方法可以为我提供工作项的所有详细信息,我只需要在其中传递工作项ID即可。
var d ={
"ids": [
20813,21677
],
"fields": ["System.Id","System.WorkItemType","System.Title","System.AssignedTo","System.State","System.Tags"]
};
$.ajax({
type: 'POST',
url: 'https://dev.azure.com/ORG/products/_apis/wit/workitemsbatch?api-version=5.1',
contentType: 'application/json',
data: JSON.stringify(d),
cache: false,
dataType: 'json',
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + btoa("" + ":" + "XXXXX"));
},
}).done(function (data) {
x=data
});