我对Ajax很新。在从HTML中的不同下拉列表中选择一个值后,我正在使用Ajax来填充下拉列表。问题是,我得到了我所需的输出和HTML格式。
javascript代码是 -
function showHint(str)
{
// alert("Ajax - " + str);
var xmlhttp;
if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","AjaxCall.jsp?q="+str,true);
xmlhttp.send();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
alert("xmlhttp.responseText - " + xmlhttp.responseText );
}
}
}
这里在xmlhttp.responseText(alert)中,我得到了输出 -
我只需要输出 -
D1&安培;&安培;&安培; D2&安培;&安培;&安培; D3&安培;&安培;&安培; D4
我不想要这个额外的HTML代码。
我的AjaxCall.jsp是 -
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="com.Search.Struts2.AccessCheckComponent"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setContentType("text/plain");
%>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
System.out.println("-------------------jsp -------------- " );
String cpmt = request.getParameter("q");
System.out.println("cpmt -!!Ajax - jsp !! " + cpmt);
String deckStr = AccessCheckComponent.CheckCompartmentDeckRelationship(cpmt);
System.out.println("deckList -!!Ajax - jsp !! " + deckStr);
response.getWriter().write(deckStr.toString());
%>
</body>
</html>
答案 0 :(得分:3)
您获取HTML,因为您将JSP在响应中发回。要解决此问题,您需要将页面的contentType
设置为text/plain
并从JSP中删除所有HTML元素(即<!DOCTYPE...>
,<html>
和所有内容。输出D1&&&D2&&&D3&&&D4
。
更清洁的解决方案是编写一个简单的Servlet
。这样,您可以避免所有JSP开销。
答案 1 :(得分:1)
如果你只需要deckStr.toString(),只需删除jsp上的其他额外代码,如:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="com.Search.Struts2.AccessCheckComponent"%>
<%@ page import="java.util.*"%>
<%
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setContentType("text/plain");
System.out.println("-------------------jsp -------------- " );
String cpmt = request.getParameter("q");
System.out.println("cpmt -!!Ajax - jsp !! " + cpmt);
String deckStr = AccessCheckComponent.CheckCompartmentDeckRelationship(cpmt);
System.out.println("deckList -!!Ajax - jsp !! " + deckStr);
response.getWriter().write(deckStr.toString());
%>
这将只显示您需要的数据。