Javascript 使用xmlhttprequest创建具有alfresco RESTApi的人员
因此,我正在为alfresco创建一个自定义共享页面,我想创建一个使用javascript的人,这要归功于(您可以在这里找到关于api的所有文档以及为什么我在这里以这种方式塑造我的var),因此我编写了以下代码,其中包含一个xmlhttprequest来发布数据:Javascript 使用xmlhttprequest创建具有alfresco RESTApi的人员,javascript,xmlhttprequest,alfresco,alfresco-share,Javascript,Xmlhttprequest,Alfresco,Alfresco Share,因此,我正在为alfresco创建一个自定义共享页面,我想创建一个使用javascript的人,这要归功于(您可以在这里找到关于api的所有文档以及为什么我在这里以这种方式塑造我的var),因此我编写了以下代码,其中包含一个xmlhttprequest来发布数据: var boby = "{ \"id\": \"bob\",\"firstName\": \"Bob\", \"lastName\": \"LeBricoleur\", \"email\": \"bob@lebricoleur.com
var boby = "{ \"id\": \"bob\",\"firstName\": \"Bob\", \"lastName\": \"LeBricoleur\", \"email\": \"bob@lebricoleur.com\", \"telephone\": \"6666666666\", \"enabled\": true,\"emailNotificationsEnabled\": true, \"password\": \"bob\" }";
console.log(boby);
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("creatingperson").innerHTML = this.responseText;
}
};
xhttp.open("POST", 'http://localhost:8081/share/proxy/alfresco-api/-default-/public/alfresco/versions/1/people', true);
xhttp.setRequestHeader("Content-Type", "application/json"); //curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Basic YWRtaW46YWRtaW4=' -d '[...]
xhttp.send(boby);
}
好吧,这没有给我任何东西。。甚至没有错误消息。起初我认为这是因为我的整个代码,所以我创建了变量boby,我将发送到服务器以简化调试,但我仍然不知道错误来自何处
我的代码有问题吗?从我使用api的方式?从户外分享自己?如果你能帮助我,非常感谢
注:我写了一个代码来列出使用相同url的人(而不是创建一个),如果可以的话
[编辑] 我已经找到了另一种方法来提出我的要求,它是有效的,但我不知道为什么。。代码如下:
var createperson = "{ \"id\": \"" + document.getElementById('login').value + "\",\"firstName\": \"" + document.getElementById('firstName').value + "\", \"lastName\": \"" + document.getElementById('lastName').value + "\", \"email\": \"" + document.getElementById('mail').value + "\", \"telephone\": \"" + document.getElementById('telephone').value + "\", \"enabled\": true,\"emailNotificationsEnabled\": true, \"password\": \"" + document.getElementById('pwd2').value + "\" }";
console.log(createperson);
var url = "http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/people";
var method = "POST";
var async = true;
//var postData = "{ \"id\": \"bob\",\"firstName\": \"Bob\", \"lastName\": \"LeBricoleur\", \"email\": \"bob@lebricoleur.com\", \"telephone\": \"6666666666\", \"enabled\": true,\"emailNotificationsEnabled\": true, \"password\": \"bob\" }";
var request = new XMLHttpRequest();
request.onload = function () {
var status = request.status; // HTTP response status, e.g., 201 for "201 OK"
var data = request.responseText; // Returned data, e.g., an HTML document.
console.log("status :");
console.log(status);
console.log("data :");
console.log(data);
}
request.open(method, url, async);
request.setRequestHeader("Content-Type", "application/json");
request.setRequestHeader("Authorization", "Basic YWRtaW46YWRtaW4=");
request.send(createperson);
此外,当我尝试使用这种类型的请求来列出人员(只是在任何地方都使用该方法)时,它不起作用。。以下是我写给名单上的人的部分内容:
var url = "http://192.168.1.103:8080/alfresco/api/-default-/public/alfresco/versions/1/people";
var method = "GET";
var async = true;
var request = new XMLHttpRequest();
request.onload = function () {
var status = request.status; // HTTP response status, e.g., 201 for "201 OK"
objet = JSON.parse(request.responseText);
console.log("status :");
console.log(status);
console.log("data :");
console.log(objet);
}
request.open(method, url, async); //, "admin", "admin");
request.setRequestHeader("Content-Type", "application/json");
request.setRequestHeader("Authorization", "Basic YWRtaW46YWRtaW4=");
所以,如果有人知道为什么它能创造一个人,为什么它不能上市,谢谢你的回答 也许这些信息会有用。看一看
关于,也许这些信息会有用。看一看
关于,基本上有两个问题 1.本api仅在alfresco版本5.2和letter中受支持,您的版本应低于5.2。 2.xhr调用中出现了一些CSRF令牌问题,可以通过添加CSRF令牌来解决,此函数代码如下
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function(demo) {console.log(demo.error);
if (this.readyState == 4 && this.status == 200) {
console.log(this);
}
};
xhttp.open("POST", 'http://localhost:8081/share/proxy/alfresco-api/-default-/public/alfresco/versions/1/people', true);
xhttp.setRequestHeader("Content-Type", "application/json");
xhttp.setRequestHeader(Alfresco.util.CSRFPolicy.getHeader(), Alfresco.util.CSRFPolicy.getToken());//CSRF Token
xhttp.send(boby);
}
基本上有两个问题 1.本api仅在alfresco版本5.2和letter中受支持,您的版本应低于5.2。 2.xhr调用中出现了一些CSRF令牌问题,可以通过添加CSRF令牌来解决,此函数代码如下
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function(demo) {console.log(demo.error);
if (this.readyState == 4 && this.status == 200) {
console.log(this);
}
};
xhttp.open("POST", 'http://localhost:8081/share/proxy/alfresco-api/-default-/public/alfresco/versions/1/people', true);
xhttp.setRequestHeader("Content-Type", "application/json");
xhttp.setRequestHeader(Alfresco.util.CSRFPolicy.getHeader(), Alfresco.util.CSRFPolicy.getToken());//CSRF Token
xhttp.send(boby);
}
为什么不使用某种REST客户端重新创建有问题的API请求,并确保它在那里工作?这样,你肯定知道那部分是有效的。你用的是哪种版本的alfresco?@Lista这部分有效。多亏了邮递员,我才完成了这项工作,我得到了一个很好的答案result@KrutikJayswal我使用的是Community-5.2.0(r135134-b14),为什么不使用某种REST客户端重新创建有问题的API请求,并确保它在那里工作?这样,你肯定知道那部分是有效的。你用的是哪种版本的alfresco?@Lista这部分有效。多亏了邮递员,我才完成了这项工作,我得到了一个很好的答案result@KrutikJayswal我正在使用社区-5.2.0(r135134-b14)是的,谢谢!尽管它没有明确说明如何编码,但它帮助我了解了响应的样子,以及我是否能够向服务器发出请求!是的,谢谢!尽管它没有明确说明如何编码,但它帮助我了解了响应的样子,以及我是否能够向服务器发出请求!我已经改变了我提出请求的方式,现在它起作用了,我不知道为什么,但它确实起作用了。我会更新我原来的帖子,让你看到新的代码。但是,当我尝试使用相同的方法来列出人员时,这一次不起作用。对于列出人员,请求方法是get而不是post。很抱歉,翻译错误,当我说方法时,我指的是http请求的类型,正如您在上面所看到的,我基本上使用了get,以前您使用的是共享代理aithentication,它启用了CSRF,因此alfresco share将阻止您的呼叫。在编辑的代码中,您使用的是alfresco server,其中您使用的是base64机制进行身份验证。这就是它起作用的原因。我更改了发出请求的方式,现在它起作用了,我不知道为什么,但它确实起作用了。我会更新我原来的帖子,让你看到新的代码。但是,当我尝试使用相同的方法来列出人员时,这一次不起作用。对于列出人员,请求方法是get而不是post。很抱歉,翻译错误,当我说方法时,我指的是http请求的类型,正如您在上面所看到的,我基本上使用了get,以前您使用的是共享代理aithentication,它启用了CSRF,因此,alfresco share将阻止您的呼叫。在编辑的代码中,您使用的是alfresco server,在该服务器中,您使用base64机制进行身份验证。这就是它起作用的原因。