【第一季•第六期】ajax & jsonp in action

32
LOGO HTTP 脚脚脚

Upload: tbosstraining

Post on 17-Nov-2014

2.524 views

Category:

Technology


14 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 【第一季•第六期】Ajax & JSONP in Action

LOGO

HTTP脚本化

Page 2: 【第一季•第六期】Ajax & JSONP in Action

HTTP请求产生的方式 访问超链接 提交表单 <link> <img> <iframe> <script> Ajax

-XMLHttpRequest

Page 3: 【第一季•第六期】Ajax & JSONP in Action

Ajax

AsynchronizedJavascriptAndXML

Jesse James Garrett 于2005年 2月提出

Page 4: 【第一季•第六期】Ajax & JSONP in Action

Ajax核心技术 XHTML 和 CSS 的标准表示; 使用 DOM ( Document Object Model )进行

动态显示及交互; 使用 XML 和 XSLT 进行数据交换及相关操作; 使用 XMLHttpRequest 进行异步数据查询、检索; 使用 JavaScript 将所有的东西绑定在一起。

Page 5: 【第一季•第六期】Ajax & JSONP in Action

Ajax思想

Http(s) 传输

用户接口

浏览器

Web服务器

服务器端系统

数据库

Http请求数据

Html+CSS数据

传统Web应用模式

Http(s) 传输

用户接口

浏览器

Web/XML服务器

服务器端系统

数据库

AJAX应用模式

AJAX引擎

Http请求数据

XML/文本数据

Html+CSS数据

Javascript调用

Page 6: 【第一季•第六期】Ajax & JSONP in Action

Ajax思想

Page 7: 【第一季•第六期】Ajax & JSONP in Action

Ajax思想

Page 8: 【第一季•第六期】Ajax & JSONP in Action

Ajax应用

Page 9: 【第一季•第六期】Ajax & JSONP in Action

Ajax应用

Page 10: 【第一季•第六期】Ajax & JSONP in Action

在 YUI下使用 Ajax

YAHOO.util.Connect.asyncRequest

asyncRequest(method,uri,callback,postData)

Method : 请求使用的方法Uri : 请求的地址Callback : 回调方法postData : 使用 POST 的时候传输的内容

Page 11: 【第一季•第六期】Ajax & JSONP in Action

在 YUI下使用 Ajax

var callback = { success: function(o){},

failure: function(o){}, argument: [] };

o.status : HTTP 响应状态码o.statusText : HTTP 响应状态码对应的信息o.getResponseHeader : 获取头信息o.getAllResponseHeaders : 获取所有头信息o.responseText : 以文本返回请求的内容o.responseXML : 以 XML 的形式返回请求的内容o.argument : 参数

Page 12: 【第一季•第六期】Ajax & JSONP in Action

HTTP响应的状态码 1xx 临时响应

100- 继续 101- 切换协议 2xx 成功响应

200 成功 3xx 已经重定向

301 永久移动 302 临时移动 304 未修改 4xx 请求错误

400 请求语法错误 401 未授权 403 已禁止 404 未找到

5xx 服务器错误500 服务器内部错误

Page 13: 【第一季•第六期】Ajax & JSONP in Action

返回内容为 JSON格式

eval(string)

var json = eval(‘{title:”taobao”,url:””}’);

eval(‘var json = {title:”taobao”,url:””}’);

Page 14: 【第一季•第六期】Ajax & JSONP in Action

jQuery中的 Ajax

$(“#id”).load() $.ajax() $.getJSON() $.get() $.post()

Page 15: 【第一季•第六期】Ajax & JSONP in Action

jQuery中的 Ajax

$(”#id”).load(url, [data], [callback]);

url : 请求的链接data : GET参数Callback : 回调方法

Page 16: 【第一季•第六期】Ajax & JSONP in Action

jQuery中的 Ajax

$.get(url, [data], [callback], [type]);

url : 请求的链接data : GET参数callback : 回调方法type : 返回的格式

$.post(url, [data], [callback], [type]);

Page 17: 【第一季•第六期】Ajax & JSONP in Action

jQuery中的 Ajax

$.getJSON(url, [data], [callback]);

url : 请求的链接data : GET参数callback : 回调方法

Page 18: 【第一季•第六期】Ajax & JSONP in Action

实现 Ajax

创建一个 XMLHttpRequest 对象 指定 HTTP 请求并向一个 Web 服务器提交 同步或异步地获取服务器的响应

Page 19: 【第一季•第六期】Ajax & JSONP in Action

实现 Ajax

XMLHttpRequest

var request = new XMLHttpRequest();

var request = new ActiveXObeject(“Msxml2.XMLHTTP”);

var request = new ActiveXObeject(“Microsoft.XMLHTTP”);

非 IE 浏览器, IE7+

IE5 IE6

Page 20: 【第一季•第六期】Ajax & JSONP in Action

实现 Ajax

request.open(“GET”, url, false);

request.setRequestHeader(“Accept-language”, ”en”);

request.send(null);

Page 21: 【第一季•第六期】Ajax & JSONP in Action

实现 Ajax

request.onreadystatechange

request.readyState

request.status

request.responseText

request.responseXML

Page 22: 【第一季•第六期】Ajax & JSONP in Action

实现 Ajax

 0 - (未初始化)还没有调用 send()方法  1 - (载入)已调用 send()方法,正在发送请求  2 - (载入完成) send()方法执行完成,已经接收到全部响应内容  3 - (交互)正在解析响应内容  4 - (完成)响应内容解析完成,可以在客户端调用了

request.readyState

Page 23: 【第一季•第六期】Ajax & JSONP in Action

实现 Ajax

request.onreadystatechange = function(){

if (request.readyState == 4 && request.status == 200){

alert(request.responseText);

}}

Page 24: 【第一季•第六期】Ajax & JSONP in Action

Ajax的适用的场景 表单的交互

– 注册页面 深层次的树状导航结构 用户与用户间所需要的快速响应

– 微博新信息的提示 没必要刷新当前页面完成的场景

– 微博回复、评论 需要对数据进行排序,过滤 普通的文本输入提示和自动完成的场景

Page 25: 【第一季•第六期】Ajax & JSONP in Action

Ajax的不适用的场景

一些简单的表单 搜索 基本的导航 替换大量的文本 对呈现的操纵

– Ajax 应作为数据同步和传输的技术

成本 > 效果 还是 效果 > 成本 ?

Page 26: 【第一季•第六期】Ajax & JSONP in Action

Ajax的缺点 后退按钮失效 无法收藏页面 页面变化导致迷失位置 调试困难 搜索引擎分析失效

Page 27: 【第一季•第六期】Ajax & JSONP in Action

Ajax常见问题 跨域问题 解决方案

– iFrame– 页面代理方式– JSONP

Page 28: 【第一季•第六期】Ajax & JSONP in Action

Ajax常见问题 乱码问题

– 采用 GBK 这种编码会遇到– 由于 Ajax 是基于 UTF-8 的编码,必须在服务端接收的时

候做一次转换 。

Page 29: 【第一季•第六期】Ajax & JSONP in Action

Ajax常见问题 缓存问题

– 加时间戳或随机数的方式解决

– 请求头设置

– POST 代替 GET (不推荐)

var url = “www.taobao.com/get.htm?t=“+newDate().getTime()var url = “www.taobao.com/get.htm?t=“+Math.ramdon();

request.setRequestHeader("Cache-Control","no-cache");request.setRequestHeader("If-Modified-Since","0");

Page 30: 【第一季•第六期】Ajax & JSONP in Action

JSONP

Page 31: 【第一季•第六期】Ajax & JSONP in Action

YUI中的 JSONP

YAHOO.util.Get.script(url, opts);

Page 32: 【第一季•第六期】Ajax & JSONP in Action

jQuery中的 JSONP

$.getScript(url, [callback]);

url : 请求的链接callback : 回调方法