javascript - AJAX打开不接受Servlet

标签 javascript json ajax servlets

我目前正在使用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/

相关文章:

javascript - 在 ember.js 中将操作从组件发送到路由

javascript - 如何在 jQuery .load() 之后更新 DOM?

javascript - JSON.解析 : unexpected non-whitespace character after JSON data

javascript - Express Subscribe 调用中的 JSON 数组出现 Angular HTML 绑定(bind)错误

javascript - 如何重用 HTML 片段但更改其中元素的 ID

javascript - 无法访问 symfony Controller 内的 javascript 变量

ruby-on-rails - 检测 PostgreSQL json 字段的变化

javascript - 从本地 JavaScript 代码到远程服务器的 AJAX 调用

jquery - 使用ajax和jquery添加到mysql db后如何将div附加到列表

java - Ajax 调用后, session 属性未在 .gsp 页面中更新