请求数据位置的不同,导致方法的不同
GET请求和POST请求的比较 | ||
| GET | POST |
如何发起 | 浏览器中输入URL回车、超链接跳转、JS跳转、SRC/HREF属性请求、GET方式提交表单、AJAX-GET | POST方式提交表单、AJAX-POST |
请求数据的位置 | 追加在URI后,作为查询字符串,以?开头 | 放在请求主体中 |
请求数据的类型 | 只能是文本字符 | 可以是任意类型,如包含图片、视频等 |
能否用于上传文件 | 否 | 能 |
请求数据长度限制 | 有,浏览器/服务器对请求URI长度有限制(如1KB、4KB等) | 请求主体没有长度限制! |
请求数据需编码? | 需要!一个UTF-8汉字编码为9个字节 | 需要!一个UTF-8汉字编码为9个字节 |
表达的语义 | 表客户端想获取 | 表客户端想传递 |
异步请求
GET:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState===4){
if(xhr.status===200){
doResponse(xhr);
}else {
alert('响应完成但有问题');
}
}
}
xhr.open('GET', 'x.php?k=v&k=v', true);
xhr.send( null );
POST:
注意:由于XHR对象发送POST请求时默认的Content-Type请求头为text/plain,PHP服务器会拒接接收请求数据,必须在请求消息发送之前进行修改!
//1 创建XHR
var xhr = new XMLHttpRequest();
//2 监听XHR的状态改变 0 1 2 3 4
xhr.onreadystatechange = function(){ }
//3 连接到Web服务器
xhr.open('POST', 'x.php', true);
//3.5 在请求主体发送之前修改请求头部Content-Type
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//4 发送请求消息
xhr.send( 'k=v&k=v' );