Javascript 来自服务器的AJAX响应未定义-仅在Firefox中 我正在将一个HTML页面的输入文本发送到Tomcat7服务器上的一个servlet,我应该接收与响应相同的输入(包含在servlet中的一个XML选项卡中),但我没有定义

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> &

我不熟悉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>
        <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响应
;jQuery
error
提供了一些有关ajax事件期间发生的错误的详细数据。@Quentin
xmlHttpRequest.responseXML.getElementsByTagName(“responseFromServer”)[0]
具有属性
textContent=“hi input”
console.log不显示任何索引,调用
.textContent
将适用于firefox,但不适用于IE或Eclipse的内置浏览器。因此,
.text'用于最后两种浏览器,而
.textContent`用于firefox。谢谢啊,是的,看起来只有IE9+支持它。我认为Eclipse使用了Windows提供的IE组件。