Javascript 使用xmlhttprequest创建具有alfresco RESTApi的人员

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

因此,我正在为alfresco创建一个自定义共享页面,我想创建一个使用javascript的人,这要归功于(您可以在这里找到关于api的所有文档以及为什么我在这里以这种方式塑造我的var),因此我编写了以下代码,其中包含一个xmlhttprequest来发布数据:

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机制进行身份验证。这就是它起作用的原因。