简体   繁体   English

Ajax 响应返回 null

[英]Ajax response returning null

I'm new to Ajax and am just starting to learn, I have managed to get data passed to my servlet but once i write back to it and then try to read from it from my web page it returns undefined Here is my code:我是 Ajax 的新手,刚刚开始学习,我已经设法将数据传递给我的 servlet,但是一旦我写回它,然后尝试从我的网页中读取它,它就会返回 undefined 这是我的代码:

Java:爪哇:

@WebServlet("/PeriodHandler")
public class PeriodHandler extends HttpServlet {

private static Connection conn = UserHandler.conn;
private String periodList;
public String date;

public PeriodHandler(){
    super();
}   

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    response.setContentType("text/xml");
    System.out.println(request.getParameter("date"));
    response.getWriter().println("<responseFromServer>The date is" + request.getParameter("date")+"</responseFromServer>");        
}
}

Javascript: Javascript:

function sendData() {
            xmlhttp.open("POST", "PeriodHandler?date=" +document.getElementById('dates').value, true);
            xmlhttp.onreadystatechange=recievedMessageFromServer;  
            xmlhttp.send();                
        }
function recievedMessageFromServer(){
            if(xmlhttp.readyState===4 && xmlhttp.status===200){
                var date = xmlhttp.responseXML.documentElement.getElementsByTagName("responseFromServer")[0];
                alert(date);
            }
        }

I hope someone could point me in the right direction, thanks我希望有人能指出我正确的方向,谢谢

responseFromServer is the root element. responseFromServer是根元素。 Try wrapping it inside another and access responseFromServer尝试将其包装在另一个内部并访问responseFromServer

//Java
response.getWriter().println("<root><responseFromServer>The date is" + request.getParameter("date")+"</responseFromServer></root>");

//Ajax - No change
var date = xmlhttp.responseXML.documentElement.getElementsByTagName("responseFromServer")[0];

The idea here is when you call xmlhttp.responseXML.documentElement it starts from the root.这里的想法是当您调用xmlhttp.responseXML.documentElement它会从根开始。 So its checks responseFromServer tag for a child element of responseFromServer .因此,它检查responseFromServer为的子元素标签responseFromServer If you dont want a root you could should remove the documentElement part like如果你不想要一个根,你应该删除documentElement部分,如

//Java - No change
response.getWriter().println("<responseFromServer>The date is" + request.getParameter("date")+"</responseFromServer>");

//Ajax
var date = xmlhttp.responseXML.getElementsByTagName("responseFromServer")[0];

没关系已经发现了问题,感谢 Syam S 为我指出正确的方向,以及任何与我有同样问题的人,这里是解决方案。

var date = xmlhttp.responseXML.getElementsByTagName("responseFromServer")[0].childNodes[0].nodeValue;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM