如何在Ajax url的响应中只获取纯文本(String)?

时间:2015-02-26 12:23:34

标签: javascript ajax jsp

我对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)中,我得到了输出 -

enter image description here

我只需要输出 -

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>

2 个答案:

答案 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());  

%>

这将只显示您需要的数据。