技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 前端开发 > javascript > 正文

ajax的responseText始终为空

来源: 技术CTO 阅读:

首先是后台servlet,主体程序为:

public void returnJSON(String json, HttpServletResponse response) throws IOException{
String encoding = "UTF-8";
String contentType = "application/json";

contentType = contentType + ";charset=" + encoding;


response.setContentType(contentType);
response.setCharacterEncoding(encoding);
PrintWriter pw = response.getWriter();

pw.write(json);
System.out.println(json);
pw.flush();
pw.close();
}

当直接在网页上访问该servlet的地址时,能返回字符串,如图
\
JavaScript代码:
<script type="text/javascript">
function ShowLoginMessage() {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", "http://localhost:8080/LoginServlet/login.do?"
+ "userid=" + myForm.userid.value + "&password="
+ myForm.password.value, true);

xmlhttp.send(null);

xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 0) {
document.getElementById("message").innerHTML = xmlhttp.responseText;

}
}
}
</script>

该代码能访问该servlet但是返回的responseText始终为空,这里由于是本地运行所以xmlhttp.status为0,当servlet运行时,
后台会打印:root
{"success":false,"msg":"用户或密码错误"}
这说明open成功,但是不知为何responseText始终为空
还望各位大大指点迷津。
xmlhttp.status == 200
看看你后台数据类型 ?
引用 2 楼 ShenShiampMoYi 的回复:
看看你后台数据类型 ?
后台数据类型是String
引用 1 楼 rui888 的回复:
xmlhttp.status == 200
我本来也这么觉得的,但是实际上是0,百度了一下说是当url为本地地址是不管是否访问成功,status的值都为0,实验了一下,的确这样
现在的问题是能访问后台servlet,并能成功产生json,但是传递失败,不知道是什么原因,,,,responseText传递的是从后台写入的的数据吧,这点应该是对的呀
引用 3 楼 u011322908 的回复:
Quote: 引用 2 楼 ShenShiampMoYi 的回复:

看看你后台数据类型 ?
后台数据类型是String
尝试输出JSON类型的数据   string 和JSON输出到前台是有差异的
  使用火狐浏览器的调试工具可以看出来   有专门的JSON 类型查看   string有的时候读不到
xmlhttp.status == 0 状态码正常返回200,才是执行成功吧。
设置一个延迟看看settimeout
status为0是本地file浏览,请求本地的文件成功时的状态

你请求的是发布后的,就是http请求的,成功请求是200

如果你是file浏览,ajax请求http,跨域了,浏览器不会将返回值交给ajax,有些浏览器还有报错
引用 9 楼 showbo 的回复:
status为0是本地file浏览,请求本地的文件成功时的状态

你请求的是发布后的,就是http请求的,成功请求是200

如果你是file浏览,ajax请求http,跨域了,浏览器不会将返回值交给ajax,有些浏览器还有报错

这样子的啊,可是status总是0呀,不知道该怎么办?是xmlhttp.open()方法中的url参数有问题吗?
引用 9 楼 showbo 的回复:
status为0是本地file浏览,请求本地的文件成功时的状态

你请求的是发布后的,就是http请求的,成功请求是200

如果你是file浏览,ajax请求http,跨域了,浏览器不会将返回值交给ajax,有些浏览器还有报错

我发现如果把异步改成同步,即把open方法的第三属性改为false即可正确返回获取字符串,真是奇怪。
求救呀,为什么异步Ajax总是失败呀?
abcderghijklmn我一哥们突然心血来潮去教室上自习,发现旁边坐一mm,快到午饭时间时,
转头对mm说:“同学,能借我五块钱么?我钱包忘宿舍里了,你看,这是我的学生证,
先压你这都行。我中午想吃碗面条。” 那mm想了一小下,说:“行”。正在掏钱的时候,
我哥们又说:“你要是借我10块,我可以请你吃一碗?”

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^