我自己封装了下ajax,但是发送post请求时,与jq发送post请求不一样。
这个是用jq发的请求:
这个是自己封装的:
我想知道是因为什么原因导致的?怎么设置成和jq一样?
下面是代码:
function ajax(options){
var xmlhttp,data;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
var method = (options.method || 'GET').toUpperCase(),
url = options.url,
async = options.async || 'false';
var onReady = function(callback){
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState === 4 && xmlhttp.status === 200){
callback(JSON.parse(xmlhttp.responseText));
}
}
}
if(method === 'GET'){
url += '?';
for (var index in options.data) {
if (options.data.hasOwnProperty(index)) {
url += index + '=' + encodeURI(encodeURI(options.data[index])) + '&';
}
}
url = url.slice(0,-1);
xmlhttp.open(method,url,async);
onReady(options.callback);
xmlhttp.send();
}else{
data = new FormData();
for (var index in options.data) {
if (options.data.hasOwnProperty(index)) {
data.append(index,encodeURI(encodeURI(options.data[index])));
}
}
xmlhttp.open(method,url,async);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=utf-8');
onReady(options.callback);
xmlhttp.send(data);
}
}
这是我自己封装请求头:
FormDate对象是XMLHttpRquest2级的类型,利用XHR对象发送FormDate生成的数据时,可以直接发送,不需要设置头部,XHR对象能够会自动识别数据类型是FormDate的实例,并配置相关的头部;
如果你使用的是XMLHttpRquest级的方法,没有FormDate方法,发送数据时需要设置头部为"application/x-www-form-urlencoded;",然后把序列化后的表单数据发送到服务器。
这里使用混淆了。
jQuery的ajax()方法发送的数据默认是序列化后的字符串,FormDate方法是一组键值对,所以不一样。
你可以通过设置jQuery ajax的一些属性来实现和你封装后一样的格式;
参考:
Sending multipart/formdata with jQuery.ajax