JavaScript封装Ajax工具函数及jQuery中的ajax,xhr在IE的兼容
封装ajax工具函数
首先要思考:
1、为什么要封装它?提高开发效率
2、把一些不确定的情况考虑在其中
a. 请求方式
b. 请求地址
c. 是否异步
d. 发送参数
e. 成功处理
f. 失败处理
3、确定参数
a. Type--请求方式 get (get/post)
b. Url--请求地址 默认当前地址 字符串
c. Async--是否异步 true (true/false)
d. Data--发送的数据 {} 对象{name:xx}
e. Success--成功回调 function 函数 函数里面就是处理的成功业务
f. Error--失败回调 function 函数 函数里面就是处理失败的业务
/*===============ajax 封装 ===========*/
/*1.确定一个全局对象*/
window.$ = {};
/*2.给全局对象定义一个属性*/
$.ajax = function(options){
/*3.options对象传参 */
/*如果用户不传或者传的不是对象停止执行*/
if(!options || typeof options != 'object') return false;
/*4.默认参数的处理*/
var type = options.type == 'post' ? 'post' : 'get';
var url = options.url || location.pathname;
var async = options.async === false ? false : true;
var data = options.data || {};
/* 对象形式的数据 需要转换成键值对的数据字符串 XHR对象需要 */
var data2str = '';
for(var key in data){
data2str += key+'='+data[key]+'&';
}
/*需要去掉最后一个&*/
data2str = data2str && data2str.slice(0,-1);
/*if(data2str){
data2str = data2str.slice(0,-1);
}*/
/*请求发送之前*/
if(options.beforeSend){
var flag = options.beforeSend();
if(flag === false){
return false;
}
}
/*5.ajax 编程*/
/*5.1 初始化对象*/
var xhr = new XMLHttpRequest();
/*5.2 设置请求行*/
xhr.open(type,type == 'get' ? (url+'?'+data2str) : url,async);
/*5.3 设置请求头*/
if(type == 'post'){
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
}
/*5.4 设置请求主体 发送*/
xhr.send(type == 'get'?null:data2str);
xhr.onreadystatechange = function(){
/*5.5 通讯完成*/
if(xhr.readyState == 4){
/*5.6 成功的*/
if(xhr.status == 200){
/*需要考虑问题 数据格式问题*/
/*1.怎么确定后台返回的数据格式?*/
/*2.后台有写接口的时候 规范 xml application/xml json application/json*/
var result = null;
var contentType = xhr.getResponseHeader('Content-Type');
/*3.如果有xml 就是xml格式数据*/
if(contentType.indexOf('xml') > -1){
result = xhr.responseXML;
}
/*4.如果有json 就是json格式数据*/
else if(contentType.indexOf('json') > -1){
result = JSON.parse(xhr.responseText);
}
/*5.如果有标识 普通文本*/
else{
result = xhr.responseText;
}
/*调用成功回调函数 把数据传递过去*/
options.success && options.success(result);
}
/*5.7 失败的*/
else{
/*调用失败回调函数*/
options.error && options.error({status:xhr.status,statusText:xhr.statusText});
}
}
};
/*
$.ajax({error:function(msg){}});
$.ajax({success:function(data){}});
* */
};
/*get*/
$.get = function(options){
options.type = 'get';
$.ajax(options);
};
/*post*/
$.post = function(options){
options.type = 'post';
$.ajax(options);
};
jQuery Ajax 操作函数
jQuery 库拥有完整的 Ajax 兼容套件。其中的函数和方法允许我们在不刷新浏览器的情况下从服务器加载数据。
| 函数 | 描述 |
|---|---|
| jQuery.ajax() | 执行异步 HTTP (Ajax) 请求。 |
| .ajaxComplete() | 当 Ajax 请求完成时注册要调用的处理程序。这是一个 Ajax 事件。 |
| .ajaxError() | 当 Ajax 请求完成且出现错误时注册要调用的处理程序。这是一个 Ajax 事件。 |
| .ajaxSend() | 在 Ajax 请求发送之前显示一条消息。 |
| jQuery.ajaxSetup() | 设置将来的 Ajax 请求的默认值。 |
| .ajaxStart() | 当首个 Ajax 请求完成开始时注册要调用的处理程序。这是一个 Ajax 事件。 |
| .ajaxStop() | 当所有 Ajax 请求完成时注册要调用的处理程序。这是一个 Ajax 事件。 |
| .ajaxSuccess() | 当 Ajax 请求成功完成时显示一条消息。 |
| jQuery.get() | 使用 HTTP GET 请求从服务器加载数据。 |
| jQuery.getJSON() | 使用 HTTP GET 请求从服务器加载 JSON 编码数据。 |
| jQuery.getScript() | 使用 HTTP GET 请求从服务器加载 JavaScript 文件,然后执行该文件。 |
| .load() | 从服务器加载数据,然后把返回到 HTML 放入匹配元素。 |
| jQuery.param() | 创建数组或对象的序列化表示,适合在 URL 查询字符串或 Ajax 请求中使用。 |
| jQuery.post() | 使用 HTTP POST 请求从服务器加载数据。 |
| .serialize() | 将表单内容序列化为字符串。 |
| .serializeArray() | 序列化表单元素,返回 JSON 数据结构数据。 |
- jQuery为我们提供了更强大的Ajax封装
- $.ajax({}) 可配置方式发起Ajax请求
- $.get() 以GET方式发起Ajax请求
- $.post() 以POST方式发起Ajax请求
- $('form').serialize() 序列化表单(即格式化key=val&key=val)
- url 接口地址
- type 请求方式
- timeout 请求超时
- dataType 服务器返回格式
- data 发送请求数据
- beforeSend: function () {} 请求发起前调用
- success 成功响应后调用
- error 错误响应时调用
- complete 响应完成时调用(包括成功和失败)
$(function(){
$.ajax({
/*1.请求方式*/
type:'get',
/*2.接口地址*/
url:'01 jquer1yAjax.php',
/*3.传递数据*/
data:{
username:'xqq'
},
/*4.限制返回数据类型 强制转换数据类型 如果转换不成功 会执行错误的回调函数*/
dataType:'json',
/*5.请求之前的回调函数*/
beforeSend:function(){
console.log('beforeSend');
/*如果请求回调函数 返回的是 false 停止ajax发送*/
//return false;
},
/*6.成功回调函数*/
success:function(data){
console.log(data);
},
/*7.失败回调函数*/
error:function(){
console.log('error');
},
/*8.通讯完成回调函数*/
complete:function(){
console.log('complete');
}
});
}); - XHR的IE兼容性
function XHR() {
/*XMLHttpRequest 存在兼容问题*/
/*1.申明一个xhr*/
var xhr;
/*2.运行出现错误 异常 */
/*3.捕获异常*/
try {
/*在不支持这个对象的时候 出现异常*/
xhr = new XMLHttpRequest();
}
/*4.处理异常*/
catch(e) {
/*低版本IE浏览器 初始化xhr对象需要的不同参数*/
var IEXHRVers =["Msxml3.XMLHTTP","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
/*变量数组*/
for (var i=0;i<IEXHRVers.length;i++) {
/*5.捕获异常*/
try {
/*低版本IE初始化xhr对象的方式*/
xhr = new ActiveXObject(IEXHRVers[i]);
}
catch(e) {
continue;
}
}
}
return xhr;
}
JavaScript封装Ajax工具函数及jQuery中的ajax,xhr在IE的兼容的更多相关文章
- 深入理解ajax系列第九篇——jQuery中的ajax
前面的话 jQuery提供了一些日常开发中需要的快捷操作,例如load.ajax.get和post等,使用jQuery开发ajax将变得极其简单.这样开发人员就可以将程序开发集中在业务和用户体验上,而 ...
- $.ajax()方法详解 jquery中的ajax方法
jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(p ...
- 从零开始学 Web 之 Ajax(六)jQuery中的Ajax
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- Javascript 常用的工具函数,更新中...
1.时间戳转为格式化时间 /** * 时间戳转为格式化时间 * @Author chenjun * @DateTime 2017-11-10 * @param {[date]} timestamp [ ...
- 封装一个Ajax工具函数
/*封装一个ajax工具函数*/ window.$ = {}; /*通过$定义一个ajax函数*/ /* * 1. type string 请求的方式 默认是get * 2. url ...
- jquery中的ajax方法
$.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Strin ...
- JavaScript原生封装ajax请求和Jquery中的ajax请求
前言:ajax的神奇之处在于JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果.Ajax 在浏览器与 Web 服务器之间使用异步 ...
- JQUERY中各个ajax函数
1.$(selecter).load() --- load() 方法从服务器加载数据,并把返回的数据放入被选元素中 2.$.get(url,callback()) 3.$.post(url,d ...
- AJAX编程-封装ajax工具函数
即 Asynchronous [e'sɪŋkrənəs] Javascript And XML,AJAX 不是一门的新的语言,而是对现有技术的综合利用.本质是在HTTP协议的基础上以异步的方式与服务器 ...
随机推荐
- CCTV-2《遇见大咖》专访雷军----笔记记录
与央视记者约好两点采访,但因为公司会议拖到了三点.雷军对此表示抱歉,解释了一天的行程,并说:“今天不算密的,密的平均一天应该有十一个会.然后我现在基本每天中午饭,大概就是三分钟的时间.” 因为要上镜, ...
- python16_day20【Django_继续抽屉项目】
一.djangoAdmin和表结构 1.项目名称 python manage startapp web # 前端页面 python manage startapp repository # 只是数 ...
- Linux系统——rpm命令
(1)查看操作系统名字.版本cat /etc/redhat-release 查看系统内核kernel的版本号uname -r查看操作系统位数uname -m (2)rpm命令rpm 参数 软件名-q ...
- maven 项目配置到tomcat不能正常启动
最近使用IntelliJ IDEA搭建公司项目,该项目是maven项目,加载jar和编译的时候没有任何异常,但是部署到tomcat上之后,就会出现如下异常: org.apache.catalina.L ...
- Centos 6.5 Install Mysql 8.0.0
依赖包 yum install numactl libaio perl-Time-HiRes per-devel -y 下载对应系统版本下载 wget http://cdn.mysql.com//Do ...
- 如何获取iClap的内测资格
iClap,一款拥有智能产品管理能力的系统,第一次遇见是在8月下旬的创新中国的展会上,茫茫人海中只因多看了你一眼,便深深的留在脑海里挥之不去,展会结束的当天就忍不住想要更多的了解你,登陆iClap官网 ...
- Codeforces Round #112 (Div. 2) D. Beard Graph
地址:http://codeforces.com/problemset/problem/165/D 题目: D. Beard Graph time limit per test 4 seconds m ...
- javascript 理解对象--- 定义多个属性和读取属性的特性
一 定义多个属性 ECMAScript5 定义了一个Object.defineProperties()方法,用于定义多个属性.此方法接受两个对象参数: 第一个对象:要添加或修改其属性的对象 第二个对象 ...
- java.lang.ClassFormatError: Trjava.lang.ClassFormatError: Truncated class fileuncated class file
周末过来加班,上传编译好的文件后,部署到服务器没事.但是服务器日志满了,把日志清除后,把服务启动,发现报这个错误,大致网上看了一下,这个错误是编译的文件损坏了.然后大致看了一下文件,还真是.由于日志满 ...
- adb常用操作
1.安装程序 adb -s serialno install -r path 2.切换电源 adb -s serialno shell input keyevent 26 3.主页键 adb -s s ...