/************************************************************************ //封装ajax 首先一个xhr自执行,创建一个xmlhttprequest的对象.这里的对象,兼容IE和W3C obj 是一个键值对, method : get或者post async : false同步, true异步.(一般都有true) success : function() {}, 成功返回的回调函数, 参数是服务器返回的值 data : 一个键值对,向服务器发送的数据. 例子: $sy().ajax({ method : ‘get‘, url : ‘demo.php‘, data : { ‘name‘ : ‘Lee‘, ‘age‘ : 100 }, success : function (text) { alert(text); }, async : true }); ajax执行顺序是,open,send, 接受数据 xhr.readyState == 4 4,完成接受到了全部数据,可以执行success 0,维初始化,没有调用open 1,启动,调用了open,但为调用send 2,调用了send,但未接受响应. 3,接收到部分数据的相应. shr.status == 200 OK, 400,语法错误导致服务器不识别 401,请求需要用户认证 404,指定的url服务器找不到. 500,服务器的意外错误. ************************************************************************/ Osye.prototype.ajax = function (obj) { var xhr = (function () { if (typeof XMLHttpRequest != ‘undefined‘) { return new XMLHttpRequest(); } else if (typeof ActiveXObject != ‘undefined‘) { var version = [ ‘MSXML2.XMLHttp.6.0‘, //这三个是兼容低版本的IE ‘MSXML2.XMLHttp.3.0‘, ‘MSXML2.XMLHttp‘]; for (var i = 0; version.length; i ++) { try { return new ActiveXObject(version[i]); } catch (e) { //跳过 } } } else { throw new Error(‘sorry, your browser is not support ajax, please change other browser. thanks.‘); } })(); if (obj.async == undefined) { //如果没有传入async.默认是异步 obj.async = true; } obj.url = obj.url + ‘?rand=‘ + Math.random(); //加一个随机数,保证每次不一样.都可以返回 obj.data = (function (data) { //函数自执行,将传输的数据,赋值给url字符串. var arr = []; for (var i in data) { arr.push(encodeURIComponent(i) + ‘=‘ + encodeURIComponent(data[i])); } return arr.join(‘&‘); //为键值对之间加入&,保持键值对的可识别性. })(obj.data); if (obj.method === ‘get‘){ //将数据,添加到url后面. obj.url += obj.url.indexOf(‘?‘) == -1 ? ‘?‘ + obj.data : ‘&‘ + obj.data; // alert(obj.data); //测试键值对 } xhr.open(obj.method, obj.url, obj.async); //发送请求类型,method,方法,url链接,async是否同步. if (obj.async === true) { //异步事件,onreadystatechange. xhr.onreadystatechange = function () { if (xhr.readyState == 4) { //成功返回. callback(); } }; } if (obj.method === ‘post‘) { //post方法 xhr.setRequestHeader(‘Content-Type‘, ‘application/x-www-form-urlencoded‘); xhr.send(obj.data); } else { //get,数据已经发出去了.在浏览器的网址输入栏里 xhr.send(null); } if (obj.async === false) //同步,就直接会回调 { callback(); } function callback() { if (xhr.status == 200) //200成功返回. { obj.success(xhr.responseText); //回调传递参数 } else { //获取数据错误,打出错误代号和错误信息. alert(‘To get the data error! Error code‘ + xhr.status + ‘,Error message:‘ + xhr.statusText); } } }
时间: 2024-08-24 01:23:41