javascript - 使用 Javascript 和 REST 登录

标签 javascript java rest

我做了一个 REST 服务,如果登录正确,它将返回一个字符串“hej”。 我已经在 J​​ava 中使用 Rest 客户端进行了测试,它工作正常,但对于 javascript 来说还很陌生,需要一些帮助。

我正在使用这个功能

function UserAction() {
console.log(User());
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "http://localhost:8080/Footballmanagerrestservice/webresources/login");
    xhttp.setRequestHeader("login", User());
    xhttp.responseType = 'text';

xhttp.onreadystatechange = function () {
    console.log('DONE', xhttp.readyState); 
    if (xhttp.readyState == 4) {;
        // handle response
        var response = xhttp.responseText;
        console.log(response);
        if (response == "hej") {
            var url = "http://localhost:8080/FM3/spil2.jsp";
            window.location.href = url;
        }
    }
};

// send the request *after* the callback is defined 
xhttp.send();
return false;
}

function User() {
username = document.getElementById("username").toString();
username = document.getElementById("password").toString();
var UserAndPass = "?username=" + username + "&password=" + password;
return UserAndPass;
} 

我向您展示了我的 Java 客户端,也许您可​​以明白为什么它不起作用。

public static void main(String[] args) {
   Client client = ClientBuilder.newClient();

  String root="http://localhost:8080/Footballmanagerrestservice/webresources/";


String functionPath="login";

String parameters="?username=s153518&password=holger";
Response res = client.target(root+functionPath+parameters)
        .request(MediaType.APPLICATION_JSON).get();
String svar = res.readEntity(String.class);
System.out.println(svar);
}

最佳答案

代码的第一部分看起来不错,以下部分必须在函数内处理,因为本质上是异步的

var response = JSON.parse(xhttp.responseText);
console.log(response);
if (response.toString() == "hej") {
    var url = "http://localhost:8080/FM3/spil2.jsp";
    window.location.href = url
}
return false;

文档:https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/onreadystatechange

本质上,您试图将响应作为同步调用来处理,但事实并非如此,响应不是立即可用的,因此您必须注册一个回调(来自文档的回调必须附加到字段 onreadystatechange),一旦服务器响应可用,就会由 javascript 触发。

尝试像这样改变它:

  xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4) {
      // handle response
      var response = JSON.parse(xhttp.responseText);
      console.log(response);
      if (response.toString() == "hej") {
        var url = "http://localhost:8080/FM3/spil2.jsp";
        window.location.href = url
      }
    }
  }

  xhr.send();

关于javascript - 使用 Javascript 和 REST 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43759651/

相关文章:

javascript - JQuery 当我单击时出现错误 Uncaught RangeError : Maximum call stack size exceeded

JAVA移动设备-本地存储数据

java - 无法解析 WifiManager 类中的公共(public)方法 setFrequencyBand

java - RHEL 5/RHEL 6 上的 libfaketime 和 java

java - 如何在没有时区的mongo DB中插入日期

java - JQuery 验证 - 如何在 "remote"方法中正确检索表单字段值?

Restassured 测试错误 - No Content-Type was specified in response

javascript - 云函数冷启动期间,node_modules 文件夹的大小是否重要?

javascript - 在重新启动计时器之前显示 Div 一段时间

javascript - 如何获取父元素?