使用xmlhttprequest创建一个使用露天RESTApi的人

时间:2017-06-07 13:13:28

标签: javascript xmlhttprequest alfresco alfresco-share

所以我正在为露天创建一个自定义共享页面,我想用REST API创建一个使用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的方式来看?从露天分享本身?如果你能帮助我很多!

P.S:我写了一个代码来列出人们(而不是创建一个),如果可以帮助那就使用相同的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=");

所以,如果有人知道为什么它有助于创建某人以及为什么它没有用于列表感谢您的回答!

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

基本上可能有2个问题。

1.此api仅在露天版本5.2和字母中受支持,您的版本应低于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);
                        }