我目前正在使用AJAX制作一个小程序。我想将 JSON 字符串发送到 Servlet,但它不起作用。在我的浏览器中,我收到错误“Uncaught TypeError:无法读取未定义的属性‘open’”
我猜这意味着它无法在以下行中找到 Servlet:
xmlHttp.open("POST", "../JSONServlet", true);
但是,我以前做过类似的程序,从未遇到过这个问题,所以我不知道该怎么做才能使它工作。
我的 html 和 js 文件位于 Web Pages/ex06 中,我的 Servlet 位于 Source Packages/servlets/JSONServlet 中,但是我尝试将其移至其他位置(尽管我已经编写了像这样工作的程序),但它没有帮助。
这是 html 和 javascript:
var xmlHttp;
window.onload = initAjax();
function initAjax() {
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE6 or older
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (ex) { // noch ältere MS Produkte
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (ex) {
}
}
}
}
function doJSON1() {
var car = new Car("Mercedes", "SLK", 2012); // car erstellen
var carAsJSON = JSON.stringify(car); // json-String machen
alert("Car object as JSON:\n " + carAsJSON);
xmlHttp.open("POST", "../JSONServlet", true); // here is the problem
xmlHttp.onreadystatechange = handleObjectRequest;
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(carAsJSON); // json-String senden
}
function handleObjectRequest() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
jsontext = xmlHttp.responseText;
alert(jsontext);
var benz = JSON.parse(jsontext);
var output = benz.brand + " " + benz.model;
document.getElementById("serverResponse").innerHTML = output;
}else{
alert("nope");
}
}else{
alert("...");
}
alert("state change");
}
function Car(brand, model, year, color) {
this.brand = brand;
this.model = model;
this.year = year;
this.color = color;
}
<input type="button" value="JSON-Object senden&empfangen" onclick="doJSON1();"/>
这是我的 Servlet 中的方法:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
InputStreamReader isr = new InputStreamReader(request.getInputStream());
try {
Gson gson = new Gson();
// auto aus request erstellen
Car car = gson.fromJson(isr, Car.class);
// anderes auto schreiben
Car car2 = new Car("audi", "tt", 2014);
gson.toJson(car2, out);
} catch (JsonSyntaxException e) {
Gson gson = new Gson();
String[] winter = gson.fromJson(isr, String[].class);
String[] summer = {"Jun", "Jul", "Aug"};
out.println(gson.toJson(summer));
}
out.flush();
out.close();
}
My Car 类是一个简单的数据类,具有 getter 和 setter、默认构造函数、自定义构造函数和 toString。
最佳答案
您需要有一个 XMLHttpRequest()
实例才能使用 open()
方法,因此请添加以下代码行:
var xmlHttp = new XMLHttpRequest();
在像这样使用 open() 方法之前:
xmlHttp.open("POST", "../JSONServlet", true);
编辑: - 正如@james 在我之前指出的那样,您也有一个拼写错误,在您的 initAjax
函数中,您有一个变量 xmlhttp
因为你的全局变量是 xmlHttp
,两者不一样。
关于javascript - AJAX打开不接受Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49497007/