写了一段代码,函数正常执行了,但是页面上ResponseText没有取到传回的值function test(element){
var trid=element.id;
var trvalue=element.value;
if(window.ActiveXObject){
try {
http= new ActiveXObject("Msxml2.XMLHTTP") ;
} catch (e) {
try {
http= new ActiveXObject("Microsoft.XMLHTTP") ;
} catch (e2) {
return null;
}
}
} else if(window.XMLHttpRequest){
http= new XMLHttpRequest() ;
}
var url = "${it.rootUrl}controller/off?id="+trid+"&name="+trvalue;
http.open("GET",url,true);
http.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
http.send(null);
http.onreadystatechange = callback;
}function callback(){
if(http. readyState==2){
if(http.status==200||http.status==0){
var responseText = http.responseText;
alert(responseText);
}
}
}
java代码
public void doOff(StaplerRequest req, StaplerResponse rsp)
throws ServletException, IOException, InterruptedException {
String result=null;
......
result = "Shutting";
getResult(result);
rsp.setContentType("text/html;charset=utf-8");
PrintWriter out=rsp.getWriter();
out.write(result); //将信息写入response
out.flush();
out.close();
}
}测试之后发现, readyState的值为2,status的值为0
然后输出responsetext的时候,就是一个空的对话框,看了下responsetext的长度未0
应该怎么改?是我后台传入数据的时候错了?
var trid=element.id;
var trvalue=element.value;
if(window.ActiveXObject){
try {
http= new ActiveXObject("Msxml2.XMLHTTP") ;
} catch (e) {
try {
http= new ActiveXObject("Microsoft.XMLHTTP") ;
} catch (e2) {
return null;
}
}
} else if(window.XMLHttpRequest){
http= new XMLHttpRequest() ;
}
var url = "${it.rootUrl}controller/off?id="+trid+"&name="+trvalue;
http.open("GET",url,true);
http.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
http.send(null);
http.onreadystatechange = callback;
}function callback(){
if(http. readyState==2){
if(http.status==200||http.status==0){
var responseText = http.responseText;
alert(responseText);
}
}
}
java代码
public void doOff(StaplerRequest req, StaplerResponse rsp)
throws ServletException, IOException, InterruptedException {
String result=null;
......
result = "Shutting";
getResult(result);
rsp.setContentType("text/html;charset=utf-8");
PrintWriter out=rsp.getWriter();
out.write(result); //将信息写入response
out.flush();
out.close();
}
}测试之后发现, readyState的值为2,status的值为0
然后输出responsetext的时候,就是一个空的对话框,看了下responsetext的长度未0
应该怎么改?是我后台传入数据的时候错了?
通常在事件中判断readyState的值是在请求完毕时才做处理,如:
function changeTabCallBack(){
if(ajaxObj.readyState==4){
// 下一步验证
}
} Status存储了服务器端返回的Http请求响应代码,它表示请求的处理结果,常见响应代码的含义如右。
在Ajax开发中,最常用就是200这个响应码,代码如下:
function changeTabCallBack(){
if(ajaxObj.readyState==4){
if(ajaxObj.status==200){
// 服务端返回了正确数据,开始响应处理
}
}
}
Http状态码 含义
200 请求成功
202 请求被接受但处理未完成
400 错误请求
404 请求资源未找到
500 内部服务器错误
但是测试之后,发现firefox中函数没有正常调用,ie中没问题...
1:你js中一句"if(http. readyState==2){" 貌似多了一个空格,而且应该按楼上所说改为4.
2:在发送请求时指定编码
http.setRequestHeader("contentType","text/html; charset=utf-8");//指定发送数据的编码格式
3:在发送请求前把url转化一下
url = encodeURI(url);
url = encodeURI(url);//一共是两句,一样的3:如果是js有错,在firefox里有个错误控制台,可以查看错误出在哪
[工具]-[错误控制台]
函数可以调用,但是firefox里面返回的responseText还是空的ie里面测试的话,第一次点击只执行到Readystate=1,函数调用了,然后第二次点击开始才会返回responseText的值。。不知道为什么,而且第二次开始点击就不执行函数了
firefox里面还是不出来文本……
ie里面http.status是200
但是ff里面是0