我是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文件的位置/文件夹结构是否重要?谢谢!
答案 0 :(得分:1)
由于我不熟悉您所使用的框架,因此我无法真正为您提供服务器端的帮助。但是以下是我对客户端代码的建议:
let
代替var
; true
标志来使请求异步,因为它是默认标志,并且很快就会弃用。addEventListener
API,而不是直接将处理程序添加到预期的目标。open
和send
之前完全设置您的请求。===
运算符代替==
。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)]。有什么建议吗?