【5】 同域 ajax 请求
jQuery 底层是先写了一个"超级复杂的函数": $.ajax();
然后再拿这个函数,封装出: $.get(); $.post(); 等等 一系列简化方法
我们不考虑太多,比如什么加载完毕后,成功后,失败后,执行什么回调。
-----------------------
// (方法GET或POST, 请求地址, 请求参数, 回调函数);
http.ajax = function(method, url, data, callback) {
// 拿到 XMLHttpRequest 对象
var xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); // 判断浏览器支持,ActiveXObject 为 IE 独有的。
xhr.open(method, url); // 打开连接
if (method === 'POST') { // 如果是 POST 请求,加上 请求头Content-Type字段
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
xhr.onreadystatechange = function() { // 状态被改变事件
if (xhr.readyState === 4) { // 完毕
// 调用回调函数,并且把 responseText (就是 out.println 输出的内容) 用 eval('(' + responseText + ')'); 调用一次,eval 是动态编译执行JS脚本的方法,外面加个 ( ) 括号,就可以将后端输出的字符串,转为json对象。
typeof callback === 'function' && callback(eval('(' + xhr.responseText + ')'), xhr.status);
xhr = null;
}
}
xhr.send(data); // 发送数据
},
|