Javascript 来自服务器的AJAX响应未定义-仅在Firefox中 我正在将一个HTML页面的输入文本发送到Tomcat7服务器上的一个servlet,我应该接收与响应相同的输入(包含在servlet中的一个XML选项卡中),但我没有定义
我不熟悉AJAX和Javascript,所以我将学习一些视频教程。我试图学习一个AJAX教程,它执行一个echo。这是一个相对简单的例子——对我来说不是现在 以下是ajaxtutorial.html:Javascript 来自服务器的AJAX响应未定义-仅在Firefox中 我正在将一个HTML页面的输入文本发送到Tomcat7服务器上的一个servlet,我应该接收与响应相同的输入(包含在servlet中的一个XML选项卡中),但我没有定义,javascript,ajax,servlets,tomcat7,Javascript,Ajax,Servlets,Tomcat7,我不熟悉AJAX和Javascript,所以我将学习一些视频教程。我试图学习一个AJAX教程,它执行一个echo。这是一个相对简单的例子——对我来说不是现在 以下是ajaxtutorial.html: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> &
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>AJAX Tutorial</title>
</head>
<body>
enter name: <input type="text" id="inputdisplay" size="25/">
<button type="button" onclick="sendMessageToServer()">send to server:</button><br/>
reply received from server:<input type="text" id="textdisplay" size="30"/>
<script type="text/javascript">
var xmlHttpRequest;
if(window.XMLHttpRequest){
xmlHttpRequest = new XMLHttpRequest();
}else if(window.ActiveXObject){
xmlHttpRequest = new ActiveXObject("MICROSOFT.XMLHTTP");
}else{
alert("Your browser does not dupport XMLHTTP!")
}
function sendMessageToServer(){
xmlHttpRequest.open("POST", "AjaxDemoServlet?name="+document.getElementById("inputdisplay").value,true);
xmlHttpRequest.onreadystatechange=receiveMessageFromServer;
xmlHttpRequest.send();
document.getElementById("inputdisplay").value="";
}
function receiveMessageFromServer(){
//xmlHttpRequest.readyState==4 ==> The XMLHttpRequest has loaded - The data transfer has completed
//xmlHttpRequest.status==200 ==> OK - The request was fulfilled
if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
alert(xmlHttpRequest.responseText);
document.getElementById("textdisplay").value = xmlHttpRequest.responseXML.getElementsByTagName("responseFromServer")[0].text;
}
}
</script>
</body>
</html>
AJAX教程
输入名称:
发送到服务器:
从服务器收到的答复:
var-xmlHttpRequest;
if(window.XMLHttpRequest){
xmlHttpRequest=新的xmlHttpRequest();
}else if(window.ActiveXObject){
xmlHttpRequest=新的ActiveXObject(“MICROSOFT.XMLHTTP”);
}否则{
警报(“您的浏览器未复制XMLHTTP!”)
}
函数sendMessageToServer(){
xmlHttpRequest.open(“POST”,“AjaxDemoServlet?name=“+document.getElementById(“inputdisplay”).value,true);
xmlHttpRequest.onreadystatechange=receiveMessageFromServer;
xmlHttpRequest.send();
document.getElementById(“inputdisplay”).value=“”;
}
函数receiveMessageFromServer(){
//xmlHttpRequest.readyState==4==>xmlHttpRequest已加载-数据传输已完成
//xmlHttpRequest.status==200=>OK-请求已完成
if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
警报(xmlHttpRequest.responseText);
document.getElementById(“textdisplay”).value=xmlHttpRequest.responseXML.getElementsByTagName(“responseFromServer”)[0]。文本;
}
}
警报在打开和关闭的responseFromServer xml标记之间显示“hi input”,但“textdisplay”显示“undefined”
这是servlet,AjaxDemoServlet.java
package com.tudor.AjaxTutorial;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/AjaxDemoServlet")
public class AjaxDemoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public AjaxDemoServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("server received the following message from client: "+request.getParameter("name"));
response.setContentType("text/xml");
response.getWriter().println("<responseFromServer>hi "+request.getParameter("name")+"</responseFromServer>");
System.out.println("server replied with the following message to client: hi "+request.getParameter("name"));
}
}
package com.tudor.AjaxTutorial;
导入java.io.IOException;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
@WebServlet(“/AjaxDemoServlet”)
公共类AjaxDemoServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
公共AjaxDemoServlet(){
超级();
}
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{}
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
System.out.println(“服务器从客户端接收到以下消息:”+request.getParameter(“name”));
setContentType(“text/xml”);
response.getWriter();
System.out.println(“服务器向客户端回复了以下消息:hi”+request.getParameter(“name”));
}
}
似乎只有在Firefox上我才收到未定义的答案。Internet Explorer和Eclipse浏览器都正确显示。对不起,这条线太窄了这条线有问题:
document.getElementById("textdisplay").value = xmlHttpRequest.responseXML.getElementsByTagName("responseFromServer")[0].text;
getElementsByTagName()
返回没有.text作为标准属性的节点数组。您需要调用.textContent
进行一些基本调试。查看浏览器开发工具中的HTTP响应。它有你期望的内容吗?XML是否通过验证?当您
console.log()
xmlHttpRequest.responseXML.getElementsByTagName(“responseFromServer”)[0]时会发生什么?或者xmlHttpRequest.responseXML.getElementsByTagName(“responseFromServer”)
?或者xmlHttpRequest.responseXML
?使用jQuery.ajax
;使用.done()
,.error()
函数,您至少可以找到问题。@killawr-这对查找错误有什么帮助?警报
正在触发,因此请求本身已成功。@Quentin来自未定义服务器的AJAX响应
;jQueryerror
提供了一些有关ajax事件期间发生的错误的详细数据。@QuentinxmlHttpRequest.responseXML.getElementsByTagName(“responseFromServer”)[0]
具有属性textContent=“hi input”
console.log不显示任何索引,调用.textContent
将适用于firefox,但不适用于IE或Eclipse的内置浏览器。因此,.text'用于最后两种浏览器,而
.textContent`用于firefox。谢谢啊,是的,看起来只有IE9+支持它。我认为Eclipse使用了Windows提供的IE组件。