/* 封装ajax函数
例子:
ajax({
url: "./TestXHR.aspx", //请求地址
type: "POST", //请求方式
data: { name: "super", age: 20 }, //请求参数
dataType: "json",
success: function (response, xml) {
// 此处放成功后执行的代码
},
fail: function (status) {
// 此处放失败后执行的代码
}
});
*/
export function ajax( options ) {
options = options || {};
options.type = ( options.type || "GET" ).toUpperCase();
options.dataType = options.dataType || "json";
let params = formatParams( options.data );
//创建 - 非IE6 - 第一步
if( window.XMLHttpRequest ) {
let xhr = new XMLHttpRequest();
} else { //IE6及其以下版本浏览器
let xhr = new ActiveXObject( "Microsoft.XMLHTTP" );
}
//接收 - 第三步
xhr.onreadystatechange = function () {
if( xhr.readyState == 4 ) {
let status = xhr.status;
if( status >= 200 && status < 300 ) {
options.success && options.success( xhr.responseText, xhr.responseXML );
} else {
options.fail && options.fail( status );
}
}
}
//连接 和 发送 - 第二步
if( options.type == "GET" ) {
xhr.open( "GET", options.url + "?" + params, true );
xhr.send( null );
} else if ( options.type == "POST" ) {
xhr.open( "POST", options.url, true );
//设置表单提交时的内容类型
xhr.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
xhr.send( params );
}
}
/* 封装 jsonp 函数
*/
export function jsonp( options ) {
options = options || {};
if( !options.url || !options.callback ) {
throw new Error( "参数不合法" );
}
//创建 script 标签并加入到页面中
let callbackName = ( "jsonp_" + Math.random() ).replace( ".", "" );
let oHead = document.getElementsByTagName("head")[0];
options.data[options.callback] = callbackName;
let params = formatParams( options.data );
let oS = document.createElement( "script" );
oHead.appendChild( oS );
//创建jsonp回调函数
window[callbackName] = function( res ) {
oHead.removeChild( oS );
clearTimeout( oS.timer );
window[callbackName] = null;
options.success && options.success( res );
};
//发送请求
oS.src = options.url + "?" + params;
//超时处理
if( options.time ) {
oS.timer = setTimeout(function() {
window[callbackName] = null;
oHead.removeChild( oS );
options.fail && options.fail({ message: "超时" });
}, options.time );
}
}
//格式化参数
function formatParams( data ) {
let arr = [];
for( let name in data ) {
arr.push( encodeURIComponent(name) + "=" + encodeURIComponent(data[name]) );
}
arr.push( ("t=" + Math.random()).replace( ".", "" ) );
return arr.join( "&" );
}
原生js实现ajax、jsonp
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一、JS原生Ajax ajax:一种请求数据的方式,不需要刷新整个页面;ajax的技术核心是 XMLHttpReq...
- 相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时...
- 前言 众所周知,jquery在我们日常开发中的使用频率非常高,与js相比,我们省去了冗长的获取元素的代码,不用考虑...
- @拭目以待:首发于原生js实现ajax及get post方法 ajax原生实现,含 post与get方法。原码如下...