原生ajax请求时出现xhr.status==0及POST请求无响应问题

用原生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()位置写颠倒了

原生ajax与jQuery ajax的比较

AJAX简单使用介绍

ajax获取servlet发送的数据

原生js实现Ajax

生Ajax书写

HTTP中application/x-www-form-urlencoded字符说明

 

关于错误总结:

1.get和post提交到servlet是分别由get和post处理,看看是不是servlet的get方法或者post方法没有设置好

2.是不是点击事件并步对应到绑定点击事件的元素

3.是否POST顺序设置有问题,先open(),再设置消息头

发布了21 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_34291570/article/details/82993768
今日推荐