用原生ajax请求时发现xhr.status == 0,于是找了好久,竟然发现是绑定事件的元素不是我点击的元素。参考以下资源
AJAX问题之XMLHttpRequest status = 0
xhr.status状态码
1、If the state is UNSENT or OPENED, return 0.(如果状态是UNSENT或者OPENED,返回0)
2、If the error flag is set, return 0.(如果错误标签被设置,返回0)
3、Return the HTTP status code.(返回HTTP状态码)
POST请求无响应
POST请求函数如下:
function post(url, data){
var req = createXMLHTTPRequest();
if(req){
//post请求需要添加请求头,否则会报错
req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
req.open("POST", url, true);
//发送请求
req.onreadystatechange = function(){
//判断是否服务器响应
if(req.readyState == 4 && req.status == 200)
requestSuccess();
}
req.send(data);
}
}
把req.setRequestHeader("Content-type","application/x-www-form-urlencoded");注释掉反而可以请求,而添加了这句就不可以,我怀疑是<a>标签不适用这种请求头,于是查了content-type的这种类型及说明:HTTP中application/x-www-form-urlencoded字符说明 还是没能解决问题。于是我仔细的对照网上的POST请求,发现应该先open,再setRequestHeader
req.open("POST", url, true);
req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
参考:
原生js的ajax请求:最初看的,后来发现里面的POST请求头和open()位置写颠倒了
HTTP中application/x-www-form-urlencoded字符说明
关于错误总结:
1.get和post提交到servlet是分别由get和post处理,看看是不是servlet的get方法或者post方法没有设置好
2.是不是点击事件并步对应到绑定点击事件的元素
3.是否POST顺序设置有问题,先open(),再设置消息头