get和post请求的不同:
1、给服务器传递数据量:
get最多2k
post原则上没有限制,php.ini对其限制为8m
2、传递数据的形式不一样:
get在url地址后以请求字符串的形式传递参数
index.php?name=francis&age=25
post则是把form表单的数据给请求出来以xml的形式传递给服务器
3、post更安全
ajax发起请求步骤:
1、创建ajax对象:xhr
2、创建http请求:相当于打开浏览器输入地址
xhr.open(请求方式,请求地址[,异步/同步请求]);
3、发送请求:相当于输入地址后按下enter
xhr.send(post请求数据/get为null);
get请求需要注意事项:
1、get请求需要传递的数据写在请求地址后,以请求字符串的形式
2、中文 = &等特殊符号需要编码处理
场景举例:实时判断用户名能否注册
如果用户名为username="francis&age=25",使用get方式发送请求,请求地址"index.php?name="+username,这个时候实际地址就是index.php?name=francis&age=25导致传递了2个参数
解决方法是:php:使用函数urlencode()/urldecode()对数据进行编码/反编码处理
js: 使用函数encodeURIComponent()对数据进行编码处理
这两个编码函数的作用都是使数据变为%后加2位十六进制的数
在服务器端可以直接接收,不需要反编码处理
post请求需要注意事项:
1、post请求需要传递的数据写在send()方法内,也是请求字符串的格式
2、使用post传递数据实质是模仿form表单给服务器传递数据,而form表单给服务器传递数据的格式为xml,所以需要把post传递的数据,即send()方法里的请求字符串,组织为xml格式
使用setRequestHeader()方法设置header头信息,把数据组织为xml格式:
xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');//此方法要紧跟在xhr.open()方法之后
3、传递的数据如果有中文 & =等特殊符号仍需要编码
4、使用post传递数据的同时也可以在请求地址中用get传递数据