您的位置:首页 > Web前端 > JavaScript

[日常记录]原生JS写Ajax的请求函数

2016-09-29 00:00 441 查看
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的一些属性来实现和你封装后一样的格式;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: