一个简单的ajax对象
function ajax(options) {
//请求参数
options = {
//类型
type: options.type || "Post",
//地址
url: options.url || "",
//超时时间
timeout: options.timeout || 5000,
//完成函数
onComplete: options.onComplete || function () { },
//错误函数
onError: options.onError || function () { },
//执行成功
onSuccess: options.onSuccess || function () { },
//传递数据
data: options.data || "",
//返回的数据类型
datatype: options.datatype || "string",
};
//创建请求对象
var xml = new XMLHttpRequest();
//初始化异步请求
xml.open(options.type, options.url, true);
//请求超时时间
var timeoutLength = options.timeout;
//请求是否成功
var requestDone = false;
//初始化一个超时执行回调函数,用于取消请求
setTimeout(function () {
requestDone = true;
}, timeoutLength); //监听文档状态的更新
xml.onreadystatechange = function () {
//保持等待,直到数据完全加载,并保证请求并未超时
if (xml.readyState == 4 && !requestDone) {
//检查请求是否成功
if (httpSuccess(xml)) {
//以服务器返回的数据作为参数调用成功回调函数
options.onSuccess(httpData(xml, options.datatype));
} else {
//发生错误时执行错误回调函数
options.onError();
}
//执行完成回调函数
options.onComplete();
//清理文档,避免内存泄露
xml = null;
}
};
//建立与服务器的连接
xml.send(); //判断http是否响应成功
function httpSuccess(r) {
try {
//如果得不到服务器状态且我们正在请求本地文件,认为成功
return !r.status && location.protocol == "file:" ||
//所有的200~300状态码表示成功
(r.status >= 200 && r.status < 300) ||
//文档未修改也表示成功
r.status == 304 ||
//Safari在文档未修改时返回空状态
navigator.userAgent.indexOf("Safari") >= 0
&& typeof r.status == "undefined";
} catch (e) {
//若检查状态失败,则假定请求是失败的
return false
}
} //从http响应中解析正确的数据
function httpData(r, type) {
//获取content-type的首部
var ct = r.getResponseHeader("content-type");
//若没有提供类型,判断服务器返回的是否是xml形式
var data = !type && ct && ct.indexOf("xml") >= 0;
//若是,获得xml文档对象,否则返回文本内容
data = type == "xml" || data ? r.responseXml : r.responseText;
//若指定类型是 script ,则以Javascript形式返回文本
if (type == "script") {
eval.call(window, data);
} else if (type == "json") {
data = eval(data);
}
//返回响应数据
return data;
}
}
使用
ajax({
url: "/Home/GetTestData",
type: "get",
datatype: "json",
onSuccess: function (result) {
alert(result);
},
onError: function (xhr) {
var x = xhr;
}
});
一个简单的ajax对象的更多相关文章
- Ajax得知(两)—— 一个简单的Ajax示例
通过部分博客认识Ajax之后,我们通过一个简单的实例来消化消化理论知识,一睹Ajax的庐山真面目. 1.实例功能: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZ ...
- 一个简单的AJAX实例
创建一个简单的XMLHttpRequest,从一个TXT文件中返回数据. 来源于菜鸟教程 <!DOCTYPE html><html><head><meta c ...
- DOM编程艺术章12:一个简单的Ajax例子
大概入了JavaScript的门,现在要回过头恶补Ajax和json了,随手翻到dom编程艺术发现有一个适合回忆的例子,先抄录下来,引入对Ajax作用的大概印象,再去掰开了研究. <!DOCTY ...
- 自己封装一个简单的ajax插件
function myAjax(obj) { var xmlHttp; //保存xmlHttpRequest对象 var type = obj.requestType; //保存请求方式 var ca ...
- 注解@requestBody自动封装复杂对象 (成功,自己的例子封装的不是一个复杂对象,只是一个简单的User对象,将jsp页面的name转成json字符串,再用JSON.stringify()传参就行了)
注意:ajax向后台传值的时候,必须加上contentType:"application/json"; springmvc的注解@requestBody可以通过页面提交json来自 ...
- 封装一个简单的ajax请求
记录自己第一次封装ajax,肯定有很多考虑不周到,如有错误请指出,本人必将虚心改正. /** * * @param {Object} obj =>header:请求头:url:请求地址:meth ...
- 一个简单的aJax——后台用servlet技术
示例:webDemo 一.客户端 <%-- Created by IntelliJ IDEA. User: Administrator Date: 15-12-2 Time: 上午5:41 To ...
- struts2框架下的一个简单的ajax例子
举个例子 jsp页面: <%@ page language="java" import="java.util.*" pageEncoding=" ...
- 一个简单的ajax上传 上传进度显示
本例用了jquery.form.js请到演示页面查看 CSS Code <style> form { display: block; margin: 20px auto; backgrou ...
随机推荐
- HTML5和CSS3实例教程[总结二]
基于contenteditable属性实现在位编辑 HTML5规范引入了contenteditable属性,它几乎可以用在任何元素上,只要添加这一属性 即可变为可编译区域 <!DOCTYPE h ...
- Emoji表情在网页中显示
最近遇到一个项目,客户手机上发送的表情要在电脑网页中显示,没有找到简便方法,于是有了以下方案. 由于Emoji表情传到后台是“口”,怎么找出接收数据中的表情是关键,各种搜索后,我用下面的正则表达式匹配 ...
- (一)Knockout - 入门
knockout 简介 knockoutjs的实现依照[MVVM模式],Model-View-ViewModel. Model,用来聚合server端数据 ViewModel,描述的数据以及操作,是行 ...
- C++编译指令#pragma pack的配对使用
#pragma pack可以用来指定C++数据结构的成员变量的内存对齐数值(可选值为1,2,4,8,16). 本文主要是强调在你的头文件中使用pack指令要配对使用,以避免意外影响项目中其他源文件的结 ...
- Grunt使用心得
1.安装npm 2.安装CLI ( npm install -g grunt-cli) 3.安装grunt (npm install grunt --save-dev) 4.添加gruntfile.j ...
- 棋盘上的距离 - Grids1657
棋盘上的距离 问题描述: 写一个程序,给定起始位置和目标位置,计算王.后.车.象从起始位置走到目标位置所需的最少步数. 王:横.直.斜都可以走,但每步限走一格. 后:横.直.斜都可以走,每步格数不受限 ...
- ubuntu下安装pyqt5
在网上看了很多ubuntu系统中安装pyqt5,感觉有些麻烦. 主要的库只有一个:python3-pyqt5 可通过新立得安装,也可通过shell命令安装 sudo apt-get install p ...
- Java虚拟机--字节码指令集
1. 字节码指令集简介: Java虚拟机的指令由一个字节长度的,代表着某种特定操作含义的操作码(Opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(Operands)所构成.虚拟机中许多指 ...
- JAVA回调函数ANDROID中典型的回调地方
在计算机中回调函数是指通过函数参数传递到其他代码类的,某一块可执行代码的引用,这以设计允许了底层代码调用者在高层定义的子程序. 在JAVA里面我们使用接口的方式来实现函数的回调. 回调的通俗就是:程序 ...
- Objective-C 静态变量 使用方法
详解Objective-C中静态变量使用方法 Objective-C中静态变量使用方法是本文要介绍的内容,Objective-C 支持全局变量,主要有两种实现方式:第一种和C/C++中的一样,使用&q ...