Skip to content

Commit d02e4cb

Browse files
committed
远程脚本编程 之 JSONP 除例子外翻译完毕
1 parent 74f1517 commit d02e4cb

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

chapter8.markdown

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,4 +407,35 @@ web worker使用postMessage()来和调用它的程序通讯,调用者通过onm
407407
- 回调函数也会检查xhr对象的status属性。这个属性和HTTP状态码对应,比如200(OK)或者是404(Not found)。我们只对状态码200感兴趣,而将其它所有的都报为错误(为了简化示例,否则需要检查其它不代表出错的状态码)。
408408
- 上面的代码会在每次创建XHR对象时检查一遍支持情况。你可以使用前面提到过的模式(如条件初始化)来重写上面的代码,使得只需要做一次检查。
409409

410+
### JSONP
411+
412+
JSONP(JSON with padding)是另一种发起远程请求的方式。与XHR不同,它不受浏览器同源策略的限制,所以考虑到加载第三方站点的安全影响的问题,使用它时应该很谨慎。
413+
414+
一个XHR请求的返回可以是任何类型的文档:
415+
416+
- XML文档(过去很常用)
417+
- HTML片段(很常用)
418+
- JSON数据(轻量、方便)
419+
- 简单的文本文件及其它
420+
421+
使用JSONP的话,数据经常是被包裹在一个函数中的JSON,函数名称在请求的时候提供。
422+
423+
JSONP的请求URL通常是像这样:
424+
425+
http://example.org/getdata.php?callback=myHandler
426+
427+
getdata.php可以是任何类型的页面或者脚本。callback参数指定用来处理响应的JavaScript函数。
428+
429+
这个URL会被放到一个动态生成的\<script\>元素中,像这样:
430+
431+
var script = document.createElement("script");
432+
script.src = url;
433+
document.body.appendChild(script);
434+
435+
服务器返回一些作为参数传递给回调函数的JSON数据。最终的结果实际上是页面中多了一个新的脚本,这个脚本的内容就是一个函数调用,如:
436+
437+
myHandler({"hello": "world"});
438+
439+
(译注:原文这里说得不是太明白。JSONP的返回内容如上面的代码片段,它的工作原理是在页面中动态插入一个脚本,这个脚本的内容是函数调用+JSON数据,其中要调用的函数是在页面中已经定义好的,数据以参数的形式存在。一般情况下数据由服务端动态生成,而函数由页面生成,为了使返回的脚本能调用到正确的函数,在请求的时候一般会带上callback参数以便后台动态返回处理函数的名字。)
440+
410441

0 commit comments

Comments
 (0)