#javascript #java #sockets #xmlhttprequest #socketserver
#javascript #java #сокеты #xmlhttprequest #socketserver
Вопрос:
Я пытаюсь отправить HTTP-запрос из JS с помощью XMLHttpRequest и получить его на Java-сервере с помощью сокета.
Я могу отправить запрос, но проблема с ответом заключается в том, что я его не получаю.
document.getElementById("Update").addEventListener("click", function() {
var xhttp;
var url = "http://192.168.43.1:8081/update";
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4) {
alert(this.responseText);
alert(this.status);
}
};
Статус, который он возвращает, равен нулю.
Вот мой Java-код:
try {
String response = "";
response = in.readLine();
System.out.println(response);
requestParser = response.split(" ");
requestType = requestParser[0];
pathFromClient = requestParser[1];
http = requestParser[2];
out.write("HTTP/1.1 200 OK");
out.flush();
socket.shutdownOutput();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
Комментарии:
1. необходимо отредактировать XHR
open()
, а затем вам нужноsend()
сделать это до фактического выполнения запроса — вы создали вызываемый varurl
… но это волшебным образом не открывается, потому что вы создали XHR сразу после него — могу я предложить краткое прочтение некоторой документации2. То, что вы отправляете, не является допустимым HTTP-ответом. Пожалуйста, не переоценивайте, как работает HTTP, а вместо этого следуйте фактическому стандарту — есть причина, по которой существуют стандарты.
3. Как только вы разберетесь с вашим запросом и ответом, вам, вероятно, также потребуется понять CORS
Ответ №1:
Вы забыли некоторые биты. Возможно, я также забыл некоторые биты; Я не тестировал это, просто ввел его, но вы поняли идею.
var url = "http://192.168.43.1:8081/update";
let xhttp = new XMLHttpRequest();
xhttp.open("GET", url);
xhttp.onreadystatechange = function() {
if (this.readyState == 4 amp;amp; this.status == 200) {
alert(this.responseText);
}
}
xhttp.send(null);