View Code

//XHR对象的创建
//适用于IE7之前的版本
function createIeXHR() {
if(typeof arguments.callee.activeXString != 'string') {
var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML.XMLHttp'];
for(var i=0, len=versons.length; i<len; i++) {
try {
var xhr = new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
return xhr;
} catch(e) {
//
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
}

//IE7+,ff,ch,sa,op
var xhr = new XMLHttpRequest();

//兼容的实现方式
function createXHR() {
if(typeof XMLHttpRequest != 'undefined') {
return new XMLHttpRequest();
} else if(typeof ActiveXObject != 'undefined') {
if(typeof arguments.callee.activeXString != 'string') {
var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML.XMLHttp'];
for(var i=0, len=versons.length; i<len; i++) {
try {
var xhr = new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
return xhr;
} catch(e) {
//
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
} else {
throw new Error('No XHR object available!');
}
}

var xhr = createXHR();

xhr.open('post', 'test.php', false);//false表示发送同步请求
xhr.open('post', 'test.php', true);//true表示发送异步请求
xhr.send(null);//发送请求

//检测status属性以确定响应已经返回
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
alert(xhr.statusText);
} else {
alert("Request was unsuccessful: " + xhr.statusText);
}

//检测readyState属性,表示请求/响应过程中的当前活动阶段
var xhr = createXHR();
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) {
if((xhr.status >= 200 && xhr.statue < 300) || xhr.status == 304) {
alert(xhr.responseText);
} else {
alert("Request was unsuccessful: " + xhr.statusText);
}
}
};
xhr.open('get', 'test.php', true);
xhr.send(null);

//HTTP头部信息
xhr.setRequestHeader('myHeader', 'myValue');//设置自定义的请求头部信息,应该在open()之前,send()时之后

var myHeader = xhr.getResponseHeader('myHeader');//传入头部字段名,取得相应的响应头部信息
var allHeader = xhr.getAllResponseHeaders();//取得一个包含所有头部信息的长字符串

xhr.open('get', 'test.php?name1=value1 & name2=value2', true);//get方法
function addURLParam(url, name, value) {
url += (url.indexOf('?') == -1) ? '?' : ' & ';
url += encodeURIComponent(name) + '=' + encodeURIComponent(value);//get方法要求对传入的url进行序列化
return url;
};

var xhr = createXHR();
xhr.onreadystatechange = function() {
try {
if(xhr.readyState == 4) {
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 204) {
alert(xhr.responseText);
} else {
alert('Request was unsuccessful: ' + xhr.status);
}
}
} catch(e) {
//(ie8)timeout事件处理程序处理
}
};
xhr.open('get', 'timeout.php', true);
xhr.timeout = 1000;//IE8为XHR构造了一个tiomeout属性
xhr.ontimeout = function() {
alert('Request did not return in a second.');
};
xhr.send(null);

var xhr = createXHR();
xhr.load = function(e) {//Firefox引入load事件
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 204) {
alert(xhr.responseText);
} else {
alert('Request was unsuccessful: ' + xhr.status);
}
};
//创建一个进度指示器
xhr.onprogress = function(event) {//进度事件
var divStatus = document.getElementById('status');
divStatus.innerHTML = 'Received ' + event.position + ' of ' + event.totalSize + ' bytes';
}
xhr.open('get', 'test.php', true);
xhr.send(null);

//跨域请求
//HDR
var xdr = new XDomainRequest();
xdr.onload = function() {
alert(xdr.responseText);
};
xdr.onerror = function() {
alert("An error occurred.");
};
xdr.timeout = 1000;
xdr.ontimeout = function() {
alert("!!!");
}
xdr.open('get', url);//XDR请求都是异步的
xdr.contentType = 'application/x-www-form-urlencoded';
xdr.send(null);

xdr.contentType = 'application/x-www-form-urlencoded';//为支持post请求而加入contentType属性
xdr.send('name1=value1 & name2=value2');

//跨域XHR
//设置Access-Control-Allow-Origin头部,并指定哪个域可以访问该资源
//如:Access-Control-Allow-Origin:http://www.wrox.com
//Access-Control-Allow-Origin:* //允许所有请求访问该资源

//JSON
//JSON的表示
{
"name" : 'chemdemo',
'title': 'student',
'auhtor': false,
'age' : 23
}

[
{
"name" : 'chemdemo',
'title': 'student',
'auhtor': false,
'age' : 23
},
{
"name" : 'chemdemo',
'title': 'student',
'auhtor': false,
'age' : 23
}
]
//求值为一个数组
var people = eval(jsonText);
//访问数据
alert(people[0].name);
//如果自己编写代码对JSON求值,最好将输入的文本放在一对圆括号中
var obj1 = eval("{}");//抛出错误
var obj2 = eval("({})");//没问题
var obj3 = eval("(" + jsonText + ")");//通用解决方案

//在AJAX中使用JSON
var jsonText = "{
\"name\": \"chemdemo\",
\"age\": 24,
\"author\": false
}";
var obj = JSON.parse(jsonText, function(key, value) {//过滤JSON数据
switch(key) {
case 'age':
return value + 1;
case 'author':
return undefined;
default:
return value;
}
});
alert(obj.name);//chemdemo
alert(obj.age);//25

//发送AJAX请求从服务器取得数据,在客户端生成<ul/>元素
var xhr = createHXR();
xhr.onreadychange = function() {
if(xhr.readyState == 4) {
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
var contacts = JSON.parse(xhr.responseText);
var list = document.getElementById("contacts");
for(var i=0, len=contacts.length; i<len; i++) {
var li = document.createElement('li');
li.innerHTML = '<a href=\"mailto:' + contacts[i].email + '\">' + contacts[i].name + '</a>';
list.appendChild(li);
}
}
}
};
xhr.open('get', 'text.php', true);
xhr.send(null);

var contacts = {
name : '',
age : 24,
email : 'chemdemo@foxmail.com'
};
var jsonText = JSON.stringify(contacts);//JSON对象的stringify()方法,把JSON放到post请求中
alert(jsonText);

var jsonText = JSON.stringify([new Function()], function(key, value) {
if(value instanceof Function) {
return '(function)';
} else {
return value;
}
});
alert(jsonText);

//使用post请求将JSON文本传递给send()
var xhr = createXHR();
var contact = {
name : 'chemdemo',
email : 'chemdme@foxmail.com'
};
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) {
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
slert(xhr.responseText);
}
}
};
xhr.open('post', 'addContact.php', true);
xhr.send(JSON.stringify(contact));

转载于:https://www.cnblogs.com/chemdemo/archive/2011/02/26/1965802.html

《JavaScript高级程序设计2》学习笔记——Ajax与JSON相关推荐

  1. 《JavaScript高级程序设计》学习笔记(一)

    文章目录 一.什么是JavaScript JavaScript的组成 二.HTML中的JavaScript 2.1 <script>元素 2.1.1 标签位置 2.1.2推迟执行脚本 2. ...

  2. JavaScript高级程序设计-----望远镜学习笔记(2)

    第3章 语言基础 3.1语法 3.1.1 区分大小写 无论是变量.函数名还是操作符,都区分大小写.text和Text是两个不同的变量. 3.1.2 标识符 所谓标识符,就是变量.函数.属性或者函数参数 ...

  3. 《JavaScript高级程序设计》学习笔记(第二章)

    在HTML中使用JavaScript 在前端开发中,HTML是整个页面的基石,用于控制页面的结构,如果没有HTML的话,JavaScript也将无用武之地,所以使用JavaScript的首要问题就是如 ...

  4. 《JavaScript高级程序设计》学习笔记——错误处理与调试

    Author:chemandy 第十四章 错误处理与调试 1.开启浏览器错误报告 1.1 Internet Explorer □Toos → Internet Option → Anvanced → ...

  5. 《JavaScript高级程序设计》读书笔记 -12.1 window对象

    <JavaScript高级程序设计>读书笔记 -12.1 window对象 12.1 window对象 12.1.1 Global作用域 12.1.2 窗口关系[不是很懂] 12.1.3 ...

  6. 《JavaScript高级程序设计》读书笔记 【8章~】【持更】

    文章目录 上一篇:<JavaScript高级程序设计>读书笔记 [1~7章] 8. BOM 8.1. window对象 窗口位置 窗口大小 打开窗口 间歇调用与超时调用 系统对话框 8.2 ...

  7. 《JavaScript 高级程序设计》精读笔记

    本系列读书笔记是我通过学习<Javascript 高级程序设计>第3版时结合自己的理解.概括.精炼然后加以一定的拓展,总结而来的,非常适合具有一定基础,同时又想把 JS 基础学更好的童鞋, ...

  8. 《Javascript高级程序设计》读书笔记之对象创建

    <javascript高级程序设计>读过有两遍了,有些重要内容总是会忘记,写一下读书笔记备忘 创建对象 工厂模式 工厂模式优点:有了封装的概念,解决了创建多个相似对象的问题 缺点:没有解决 ...

  9. JavaScript高级程序设计(读书笔记)(六)

    本笔记汇总了作者认为"JavaScript高级程序设计"这本书的前七章知识重点,仅供参考. 第六章 面向对象的程序设计 面向对象(Object-Oriented, OO)的语言有一 ...

  10. JavaScript高级程序设计(读书笔记)(一)

    本笔记汇总了作者认为"JavaScript高级程序设计"这本书的前七章知识重点,仅供参考. 第一章 JavaScript简介 JavaScript发展简史: 1995年,JavaS ...

最新文章

  1. userAgent,JS用户代理检测——判断浏览器内核、浏览器、浏览器平台、windows操作系统版本、移动设备、游戏系统
  2. 谈谈CListCtrl如何调整行高
  3. 【学术相关】研究生通常都有怎样的作息时间呢?
  4. hdu 4666 Hyperspace
  5. 如何用Java代码解析json
  6. php 发送短信 sms,php 调用百度sms来发送短信的实现示例
  7. 看看吉祥三宝程序员版本你就明白了
  8. day24-抽象类与接口类
  9. 如何跟踪发现Linux内核补丁(patch)
  10. 赠票福利 | 2018人工智能计算大会报名开启:算力爆燃,AI进化
  11. [leetcode]14. 最长公共前缀
  12. 移动端日期控件 mobiscroll
  13. 书评第001篇:《C++黑客编程揭秘与防范》
  14. 第一次学游泳技巧_第一次学游泳小学生作文(精选5篇)
  15. 自定义敏感词检测器_使用转移学习创建自己的自定义对象检测器
  16. 图的存储结构——邻接表
  17. Thoughtworks笔试作业
  18. oracle下的inventory文件夹,在 Oracle Home 目录中重建Central Inventory(oraInventory)的步骤...
  19. android系统更新原理简介
  20. mysql分组取最新时间的数据

热门文章

  1. Zabbix监控之检测程序日志中错误发生的次数
  2. GNUstep 运行gui程序
  3. Line RichEdit类
  4. 以后装个云集群和云节点啥的太简单了(ubuntu)
  5. 异常——Python
  6. 数据挖掘-二手车价格预测 Task04:建模调参
  7. 大数据可视化方法有哪些
  8. 大数据对医学发展有什么影响
  9. flex右对齐_移动WEB开发 — Flex布局
  10. java获取classes_一个Java项目布署到weblogic里,听说weblogic会把classes目录打成jar包,怎么获取classes里文件的路径...