dojo 十一 jsonp
官方教程:Getting Jiggy with JSONP
Dojo对Ajax实现的框架XHR的功能很强大,但 XHR 框架的函数有一问题就是不能跨域访问,浏览器不允许 XHR
对象访问其他域的站点。
此时我们就要用到JSONP技术。
什么是JSONP?
JSONP(JSON with
Padding)是一种实现脚本动态加载的技术。JSON 表示返回的 Javascript 其实就是一 JSON 对象,这是使用 JSONP 这种方式的前提条件。
Padding 表示在 JSON
对象前要附加上一些东西。
JSONP技术的原理
我们知道在<script>标签里src属性是可以指向本域或其他域的文件,只要这些文件最后返回的是
javascript 。返回的 javascript 会立即在浏览器中执行,执行结果存储在本地浏览器。script
标签不仅可以静态添加到页面中,也可以被动态插入到页面中,而且通过 DOM 操作方式动态插入的 script 标签具有与静态 script 标签一样的效果,动态
script 标签引用的 javascript
文件也会被执行。
这里又出现一个问题,如何判断动态加载的脚本执行完毕?有了JSONP就不必担心这个问题。JSONP会在脚本执行完后自动调用我们想要执行的回调函数。
require([
"dojo/io/script"
,
"dojo/domConstruct"
,
"dojo/domReady!"
],
function
(ioScript, domConstruct){
//make the request just as before
ioScript.get({
callbackParamName:
"callback"
,
content: {q:
"#dojo"
}
}).then(
function
(data){
//we're only interested in data.results, so
strip it off and return it
return
data.results;
}).then(
function
(results){
//create an interval timer that will remove the
first item in
//the array and render it. Stop the loop when
the results have been
//exhausted.
var
handle =
setInterval(
function
(){
domConstruct.create(
"li"
,
{innerHTML:
results.shift().text},
"tweets"
);
if
(results.length <
1){
clearInterval(handle);
}
}, 200);
});
});
首先要引入包dojo/io/script
然后调用script.get方法。方法中的参数同xhr.get方法一样,除了callbackParamName这个参数。
callbackParamName:指定回调方法名
称,即动态脚本加载并执行完后调用的那个本地的方法。指定了这个参数,dojo会按JSONP的方式来处理。但并不一定要指向一个已经定义好的方法,如上例中的callback,本地并没有实现这个方法,dojo会自动创建一个回调函数并执行,但什么也不做。then方法会在get中指定的回调函数执行完后再执行。其中参数data即为跨域请求后返回的数据,它是一个JSON对象。
需要注意的时,JSONP不能像XHR一样对失败的请求进行处理,但我们可以通过设置timeout属性,对超时的情况进行处理。
dojo 十一 jsonp的更多相关文章
- JS框架设计之模块加载系统
任何语言一到大规模应用阶段,必然要拆封模块,有利于维护和团队协作,与Java走得最近的dojo率先引进了加载器,使用document.write与同步Ajax请求实现,后台dojo以JSONP的方法来 ...
- 循序渐进Python3(十一) --6-- Ajax 实现跨域请求 jsonp 和 cors
Ajax操作如何实现跨域请求? Ajax (XMLHttpRequest)请求受到同源策略的限制. Ajax通过XMLHttpRequest能够与远程的服务器进行信息交互,另外 ...
- Dojo前端开发框架与jQuery前端开发框架,对比分析总结
最近Dojo和jQuery双双发布了最新的1.8版本,有着相同版本号的两个Javascript库也有许多核心的相同之处:相同的资源加载机制AMD.相同的选择器 引擎Sizzle等.作为业界知名的Jav ...
- jQuery源码分析系列(35) : Ajax - jsonp的实现与原理
ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本 json核心就是:允许用户传递一个callba ...
- AngularJS中的JSONP实践
欢迎大家指导与讨论: ) 概念 首先呢,Json和JSONP是不一样的哦.Json呢,是众多数据存储的其中一种格式,是数据书写方式的其中一种.好比是大中华众多诗体的一种(比如说是七言诗吧).这种诗体规 ...
- dojo Provider(script、xhr、iframe)源码解析
总体结构 dojo/request/script.dojo/request/xhr.dojo/request/iframe这三者是dojo提供的provider.dojo将内部的所有provider构 ...
- dojo/request模块整体架构解析
总体说明 做前端当然少不了ajax的使用,使用dojo的童鞋都知道dojo是基于模块化管理的前端框架,其中对ajax的处理位于dojo/request模块.一般情况下我们使用ajax请求只需要引入do ...
- dojo(四):ajax请求
储备知识 1.在介绍新版本的ajax请求之前,需要先了解一些dojo/Deferreds. 初次听到“Deferred”这个概念,可能会觉得这是一个神秘的东西.实际上它在执行异步操作的时候非常强大,例 ...
- dojo.io.script
dojo.io.script 定义: 跨域访问数据,可以动态的将script标签插入到网页当中. 局限: 1.只支持get方式访问: 2.只支持异步调用. 使用: 1.dojo.io.script.g ...
随机推荐
- AngularJS打印问题
http://stackoverflow.com/questions/22189544/print-a-div-using-javascript-in-angularjs-single-page-ap ...
- memcached使用说明
1.在服务器上注册服务 2.启动服务:services.msc 3.客户端创建服务接口 object Get(string key); List<string> GetKeys ...
- bzoj 1015 并查集
逆向思维,先将整张图以最后所有要求的点毁掉的状态建图,然后倒着 加点就行了,用并查集维护连通块 /*************************************************** ...
- 【BZOJ】【1001】 【BJOI2006】狼抓兔子
平面图最小割->对偶图最短路 平面图最小割转对偶图最短路= = 想到了就比较好写了…… 可能是我对区域的标号方式比较奇特?反正我没有特判n==1||m==1也能过2333(机智吧-(滚开啦你个自 ...
- 版本控制 - SVN/TortoiseSVN
研读了blog: 1. http://www.open-open.com/lib/view/open1346982569725.html 2. http://www.360doc.com/conte ...
- javascript中关于坐标 大小 的描述
window对象 有效桌面的大小,除去桌面下面的任务栏的高度 window.screen.availHeight : window.screen.availWidth : 浏览器窗口的左上角相对于 ...
- Firefly卡牌手游《暗黑世界V1.5》服务器端源码+GM管理后台源码
http://www.9miao.com/content-6-304.html Firefly卡牌手游<暗黑世界V1.5>服务器端源码+GM管理后台源码 关于<暗黑世界V1.5> ...
- Sqli-labs less 58
Less-58 执行sql语句后,并没有返回数据库当中的数据,所以我们这里不能使用union联合注入,这里使用报错注入. Payload:http://127.0.0.1/sqli-labs/Less ...
- C#&java重学笔记(泛型)
C#部分: 1.泛型的出现主要用于解决类.接口.委托.方法的通用性,通过定义泛型类.接口.委托.方法,可以让不同类型的数据使用相同运算规则处理数据,方便了开发. 2.利用System.Nullable ...
- POJ 1969
#include <iostream> #include <cmath> using namespace std; int main() { //freopen("a ...