当前位置: 首页 > 知识库问答 >
问题:

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

须鸿祯
2023-03-14

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

<html>
<body>
    <div class="login">
    <h1>Login</h1>
    <form method="post">
        <input type="text" name="u" placeholder="Username" id="username" required="required" />
        <input type="password" name="p" placeholder="Password" id="password" required="required" />
        <input type="text" name="p" placeholder="Organization" id="organization" required="required" />
        <button type="submit" onclick="loginfunc()">Let me in.</button>

    </form>
    </div>
    <script>
        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.open( "POST", url, true); // false for synchronous request
            xmlHttp.send( null );
            var response = JSON.parse(xmlhttp.responseText);
            document.write(response)
        }
    </script>

</body></html>

编辑:我根据以下建议更改了登录功能:

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);
            }

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

共有1个答案

卞云瀚
2023-03-14

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

xmlHttp.onreadystatechange = function () {
  if(xmlHttp.readyState === XMLHttpRequest.DONE && xmlHttp.status === 200) {
    console.log(xmlHttp.responseText);
  }
};
 类似资料:
  • 问题内容: 我正在尝试使用Java Mail Library将iCal发送到Outlook,我已经阅读了[Question](http://codingdict.com/questions/122902,并且已经有一些示例代码 但是它是作为Outlook 2007和Outlook 2003的附件发送的,即使单击附件进行查看和接受,也不会收到“答案”,这是应用程序具有类似Outlook的功能的目的。

  • 我想使用RESTTemplate将POST请求发送到RestAPI。当我执行下面的代码时,它给出了null响应。但是,我得到了http状态代码200 OK。我已经适当地添加了响应模型,所以模型没有问题。甚至,当我将响应类型更改为String时,它也不给我响应。有什么建议吗?

  • 我想做以下事情: 感谢任何回应。 我的单元测试如下: 演示方法用于组装tlv(我们的自定义协议)对象。 关键日志如下: 创建的TcpClient工作不好,我不知道如何更正,有人能告诉我一种正确的方法吗。

  • 如何通过代码将我的响应和请求对象从jsp文件发送到servlet?我不想提交表单之类的。 我试过了: 但它说: 澄清一下:我有一个客户端向JSP文件发送一个post请求。这个JSP文件解析一个文件并将所需的信息放入会话中。我想从这个jsp文件中调用一个servlet来向数据库中添加一些东西。我认为这个错误代码是由这行

  • 我必须创建一个tcp客户端 1) -将向服务器发送请求消息并接收响应 2)-有时服务器将msg推送到客户端,而没有来自客户端的任何请求,因此客户端应该接受并阅读它。 因此,我已经就其中的第1部分提出了问题,我的tcp客户端使用spring集成无法得到响应,并试图找到一些解决方案。但对于第二部分,我不知道如何使用tcpoutboundgateway或带有客户机标志enable的inboundgate

  • 这是我第一次尝试进行基本身份验证,但似乎没有任何效果。Axios post未发送数据/控制器未返回响应。我找不到我到底哪里出错了,但我想知道我的http post请求的主体是否必须与requestbody匹配,或者我需要做什么更改才能让UserRepository将表单dat保存在数据库中? }