我在a.jsp中用ajax 调用b.jsp ,然后b.jsp返回给a.jsp 一个字符串“no” ,可是在a.jsp 中alert()该字符串,后边多了18个空格,不知道为什么!!两个jsp的主要代码如下:a.jsp:/*ajax 验证是否可以修改*/
var xmlhttp;
//分辨浏览器,获取XMLHttpRequest对象
function create(){
if(window.XMLHttpRequest){
//IE7,IE8,火狐,傲游
xmlhttp = new XMLHttpRequest();
} else if(window.ActiveXObject){
//IE5,IE6,360?
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}function check(){
create();
//根据xmlhttp对象的状态,调用回调函数
xmlhttp.onreadystatechange = callback;
//建立与服务器端的连接 : 提交的方式,提交目标的地址,是否使用异步机制
xmlhttp.open("GET","b.jsp?random="+Math.random(),true); xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //发送数据
xmlhttp.send(null);
}function callback(){
//如果xmlhttp对象的状态为4,则运行下面的程序
if(xmlhttp.readyState == 4){
//响应的数据是否正确  status响应码
if(xmlhttp.status == 200){
//获取xmlhttp响应结果  二种:responseText:字符串   responseXML:xml文档   JSON
var result = xmlhttp.responseText;
alert(result + result.length);

}
}
}
b.jsp:<%@page contentType="text/html; charset=GBK" %>
<%@page import="java.io.PrintWriter"%>
<%
//设置响应报头
response.setContentType("text/html;charset=GBK");
//获取输出对象
PrintWriter out2 = response.getWriter();out2.print("no");
%>
运行程序最后在a.jsp页面的显示对话框如下
如果我把b.jsp的内容改成<%
out.print("no");
%>则返回的字符串所含空格数会变小,如下图
经过我实验,发现返回的字符串里所含的空格的多少和b.jsp里面的内容多少有关,内容越多空格越多,反之内容越少空格越少,但是空格数不会变为0,最小变成了8,这是为什么啊?还请大仙们给解释下~
AjaxAjax获得返回值异常

解决方案 »

  1.   


    <%@page contentType="text/html; charset=GBK" %>
    <%@page import="java.io.PrintWriter"%>
    <%@page import="java.io.OutputStream"%>
    <%
    //设置响应报头
    response.setContentType("text/plain;charset=GBK");
    //获取输出对象
    OutputStream os = response.getOutputStream();
    os.write("no".getBytes());
    os.close();
    %>b.jsp
    改成这样就没空格啦!
    不懂,同问!
      

  2.   

    因为<%%>这种小脚本,翻译成servlet 之后都是,out.println("");
    每一次输出都占用一行,然后xmlhttp.responseText 把所有的执行的html结果全部获取到了。
      

  3.   


    嗯,我试了,果真可以。不过我发现我的也不用改,直接在后边加上个out2.close();就行了。所以说用PrintWriter 或 OutputSteam都行。谢谢各位啦...