如何使用javascript发送请求并从REST API接收响应?

时间:2017-11-05 05:52:00

标签: javascript html json rest api

我的计算机上运行了一个本地服务器,它有一个内置的REST API。 api的基本网址是:http://127.0.0.1:8090/ehr/api/v1。现在我想使用这个api为这个服务器创建一个客户端应用程序。要登录此服务器,api url是使用POST方法的baseurl / login。它将用户名,密码和组织作为参数,如果登录成功,则在json中返回auth令牌。现在我想在html和javascript中创建一个表单,如果响应是一个auth令牌,它将询问用户名,密码,组织并登录用户,否则如果错误中的响应而不是令牌,用户将无法登录in。这个表单的html和javascript代码应该是什么?我键入以下代码来输出身份验证令牌但它没有显示任何结果。甚至控制台日志都是空的。

function loginfunc(){
                var baseurl = "http://localhost:8090/ehr/api/v1";
                var funcurl = "/login";
                var username = document.getElementById("username");
                var password = document.getElementById("password");
                var organization = document.getElementById("organization");
                var url = baseurl+funcurl+"?username="+username+"&password="+password+"&organization="+organization;
                var xmlHttp = new XMLHttpRequest();
                xmlHttp.onreadystatechange = function () {
                    if(xmlHttp.readyState === XMLHttpRequest.DONE && xmlHttp.status === 200) {
                        console.log(xmlHttp.responseText);
                    }
                };
                xmlHttp.open( "POST", url, true); // false for synchronous request              
                xmlHttp.send( null );
                document.write(xmlHttp.responseText);
            }

编辑:我根据对此的建议更改了登录功能:

DECLARE     @EmployeeCode           BIGINT = 1234,
            @FirstName              VARCHAR(250) = 'FirstName',
            @MiddleName             VARCHAR(250) = 'LastName',
            @LastName               VARCHAR(250) = 'LastName',
            @Nationality            VARCHAR(250) = 'Nationality',
            @BloodGroup             VARCHAR(4)   = 'A+',
            @Gender                 VARCHAR(7)   = 'Male'

IF NOT EXISTS ( SELECT  tbTableName.EmployeeCode
                FROM    dbo.tbTableName tbTableName
                WHERE   tbTableName.EmployeeCode    =   @EmployeeCode)
BEGIN

INSERT INTO dbo.tbTableName (EmployeeCode, FirstName, MiddleName, LastName,Nationality, BloodGroup, Gender )
VALUES (@EmployeeCode, @FirstName, @MiddleName, @LastName, @Nationality, @BloodGroup, @Gender )

END

但是现在我在xmlHttp.send()函数中遇到401未经授权的错误。我无法理解为什么当我使用像失眠的REST客户端请求相同的URL时,它工作正常并返回auth令牌。

1 个答案:

答案 0 :(得分:0)

您对服务器的请求是异步的,因此您的代码不能立即采取响应。这是使用回调完成的:

xmlHttp.onreadystatechange = function () {
  if(xmlHttp.readyState === XMLHttpRequest.DONE && xmlHttp.status === 200) {
    console.log(xmlHttp.responseText);
  }
};