AJAX调用失败,URL路径正确吗?

时间:2019-11-12 14:47:14

标签: javascript java ajax servlets

我是Web开发的初学者(自学),我试图通过AJAX将我的javascript .js文件连接到Java servlet。它没有进行AJAX调用,也没有输入Java代码,而是返回了回调函数。我的网址映射或路径指定正确吗?还是可以看到其他错误?谢谢!

JS代码:

    a = parseInt(document.getElementById("num"+ 0).value);

    var xhr = new XMLHttpRequest();

    xhr.open("GET", "/add?num1=" + a , true ); // true is for Asynchronous request
    alert("here3 a=" + a);
    xhr.send();
    var ret = eval(xhr.responseText); //just trial
    alert("eval" + ret);
    xhr.onreadystatechange = () => { 
        if(xhr.readyState == 4 && xhr.status == 200){
            document.getElementbyId('ajaxResponse').innerHTML = xhr.responseText;
            var ret = eval(xhr.responseText);
            alert("Callback1 = " + ret); 
        } 
        else(alert("Callback failed"))
    };

Java servlet:

public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {

    System.out.println("Add Servlet called");
    int i = Integer.parseInt(req.getParameter("num1"));
//  int j = Integer.parseInt(req.getParameter("num2"));

//  int k = i+j;        

     PrintWriter out = res.getWriter(); 
     out.println("Result is i=" + i);
     res.setContentType("text/plain");
     res.getWriter().write(i);  
   }

Web.xml

(servlet):callJava           com.AddServlet

(servlet映射):callJava                   / add

它仅在回调函数的其他情况下才起作用(“回调失败”)。另外,如果映射是在.xml文件中完成的,则servlet或js文件的位置/文件夹结构是否重要?谢谢!

2 个答案:

答案 0 :(得分:1)

由于我不熟悉您所使用的框架,因此我无法真正为您提供服务器端的帮助。但是以下是我对客户端代码的建议:

  • 使用let代替var
  • 不需要
  • true标志来使请求异步,因为它是默认标志,并且很快就会弃用。
  • 最好使用新的addEventListener API,而不是直接将处理程序添加到预期的目标。
  • 在致电opensend之前完全设置您的请求。
  • 使用===运算符代替==
const a = parseInt(document.getElementById("num" + 0).value);

let xhr = new XMLHttpRequest();

xhr.addEventListener('readystatechange', (e) => {
  if(e.target.readyState === 4){
    document.getElementbyId('ajaxResponse').innerHTML = e.target.responseText;  
  }
});

xhr.open("GET", "/add?num1=" + a);
xhr.send();

请告诉我它是否有效。如果是这样,您可能要检查服务器是否正确设置了“找到的”响应代码(200)。

答案 1 :(得分:1)

好吧,我知道了,URL应该只是“ add?num1 =”而不是“ / add?num1 =”。它确实通过.xml文件映射!现在我到达java文件,状态为200:D 接下来,我试图弄清楚如何将java servlet中的任何ajax响应值都返回给javascript文件或html文件。我应该在xhr.onreadystatechange()函数中以某种方式执行此操作吗?它仍然不能同时满足两个条件[if(xhr.readyState == 4 && xhr.status == 200)]。有什么建议吗?