Skip to content

Commit 038808d

Browse files
committed
远程脚本 校对完一部分
1 parent 6a9b70b commit 038808d

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

chapter8.markdown

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -351,9 +351,9 @@ web worker使用`postMessage()`来和调用它的程序通讯,调用者通过`
351351

352352
### XMLHttpRequest
353353

354-
现在,XMLHttpRequest是一个特别的对象(构造函数),绝大多数浏览器都可以用,它使得我们可以从JavaScript来发送HTTP请求。发送一个请求有以下三步:
354+
现在,`XMLHttpRequest`是一个特别的对象(构造函数),绝大多数浏览器都可以用,它使得我们可以从JavaScript来发送HTTP请求。发送一个请求有以下三步:
355355

356-
1. 初始化一个XMLHttpRequest对象(简称XHR)
356+
1. 初始化一个`XMLHttpRequest`对象(简称XHR)
357357
2. 提供一个回调函数,供请求对象状态改变时调用
358358
3. 发送请求
359359

@@ -363,11 +363,11 @@ web worker使用`postMessage()`来和调用它的程序通讯,调用者通过`
363363

364364
但是在IE7之前的版本中,XHR的功能是使用ActiveX对象实现的,所以需要做一下兼容处理。
365365

366-
第二步是给readystatechange事件提供一个回调函数
366+
第二步是给`readystatechange`事件提供一个回调函数
367367

368368
xhr.onreadystatechange = handleResponse;
369369

370-
最后一步是使用open()和send()两个方法触发请求。open()方法用于初始化HTTP请求的方法(如GET,POST)和URL。send()方法用于传递POST的数据,如果是GET方法,则是一个空字符串。open()方法的最后一个参数用于指定这个请求是不是异步的。异步是指浏览器在等待响应的时候不会阻塞,这明显是更好的用户体验,因此除非必须要同步,否则异步参数应该使用true:
370+
最后一步是使用`open()``send()`两个方法触发请求。`open()`方法用于初始化HTTP请求的方法(如GET,POST)和URL。`send()`方法用于传递POST的数据,如果是GET方法,则是一个空字符串。`open()`方法的最后一个参数用于指定这个请求是不是异步的。异步是指浏览器在等待响应的时候不会阻塞,这明显是更好的用户体验,因此除非必须要同步,否则异步参数应该使用true:
371371

372372
xhr.open("GET", "page.html", true);
373373
xhr.send();
@@ -382,7 +382,7 @@ web worker使用`postMessage()`来和调用它的程序通讯,调用者通过`
382382

383383
if (typeof XMLHttpRequest === "function") { // native XHR
384384
xhr = new XMLHttpRequest();
385-
} else { // IE before 7
385+
} else { // IE7以下
386386
for (i = 0; i < activeXids.length; i += 1) {
387387
try {
388388
xhr = new ActiveXObject(activeXids[i]);
@@ -406,14 +406,14 @@ web worker使用`postMessage()`来和调用它的程序通讯,调用者通过`
406406

407407
代码中的一些说明:
408408

409-
- 因为IE6及以下版本中,创建XHR对象有一点复杂,所以我们通过一个数组列出ActiveX的名字,然后遍历这个数组,使用try-catch块来尝试创建对象
410-
- 回调函数会检查xhr对象的readyState属性。这个属性有0到4一共5个值,4代表“complete”(完成)。如果状态还没有完成,我们就继续等待下一次readystatechange事件
411-
- 回调函数也会检查xhr对象的status属性。这个属性和HTTP状态码对应,比如200(OK)或者是404(Not found)。我们只对状态码200感兴趣,而将其它所有的都报为错误(为了简化示例,否则需要检查其它不代表出错的状态码)。
409+
- 因为IE6及以下版本中,创建XHR对象有一点复杂,所以我们通过一个数组列出ActiveX的名字,然后遍历这个数组,使用`try-catch`块来尝试创建对象
410+
- 回调函数会检查`xhr`对象的`readyState`属性。这个属性有0到4一共5个值,4代表“complete”(完成)。如果状态还没有完成,我们就继续等待下一次`readystatechange`事件
411+
- 回调函数也会检查xhr对象的`status`属性。这个属性和HTTP状态码对应,比如200(OK)或者是404(Not found)。我们只对状态码200感兴趣,而将其它所有的都报为错误(为了简化示例,否则需要检查其它不代表出错的状态码)。
412412
- 上面的代码会在每次创建XHR对象时检查一遍支持情况。你可以使用前面提到过的模式(如条件初始化)来重写上面的代码,使得只需要做一次检查。
413413

414414
### JSONP
415415

416-
JSONP(JSON with padding)是另一种发起远程请求的方式。与XHR不同,它不受浏览器同源策略的限制,所以考虑到加载第三方站点的安全影响的问题,使用它时应该很谨慎。
416+
JSONP(JSON with padding)是另一种发起远程请求的方式。与XHR不同,它不受浏览器同源策略的限制,所以考虑到加载第三方站点内容的安全问题,使用它时应该很谨慎。
417417

418418
一个XHR请求的返回可以是任何类型的文档:
419419

@@ -422,26 +422,24 @@ JSONP(JSON with padding)是另一种发起远程请求的方式。与XHR不
422422
- JSON数据(轻量、方便)
423423
- 简单的文本文件及其它
424424

425-
使用JSONP的话,数据经常是被包裹在一个函数中的JSON,函数名称在请求的时候提供
425+
而使用JSONP的话,返回的数据格式经常是被一个函数包裹的JSON,具体的函数名称在请求的时候提供
426426

427427
JSONP的请求URL通常是像这样:
428428

429429
http://example.org/getdata.php?callback=myHandler
430430

431-
getdata.php可以是任何类型的页面或者脚本。callback参数指定用来处理响应的JavaScript函数
431+
`getdata.php`可以是任何类型的页面或者脚本。`callback`参数指定用来处理响应的JavaScript函数(译注:也就是前面提到的包裹JSON的函数)
432432

433-
这个URL会被放到一个动态生成的\<script\>元素中,像这样:
433+
这个URL会被放到一个动态生成的`<script>`元素中,像这样:
434434

435435
var script = document.createElement("script");
436436
script.src = url;
437437
document.body.appendChild(script);
438438

439-
服务器返回一些作为参数传递给回调函数的JSON数据。最终的结果实际上是页面中多了一个新的脚本,这个脚本的内容就是一个函数调用,如:
439+
服务器返回的JSON数据作为参数被传递给回调函数(函数名在请求时指定,也出现在返回的结果中)。最终的结果实际上是页面中多了一个新的脚本,这个脚本的内容就是一个函数调用,如:
440440

441441
myHandler({"hello": "world"});
442442

443-
(译注:原文这里说得不是太明白。JSONP的返回内容如上面的代码片段,它的工作原理是在页面中动态插入一个脚本,这个脚本的内容是函数调用+JSON数据,其中要调用的函数是在页面中已经定义好的,数据以参数的形式存在。一般情况下数据由服务端动态生成,而函数由页面生成,为了使返回的脚本能调用到正确的函数,在请求的时候一般会带上callback参数以便后台动态返回处理函数的名字。)
444-
445443
#### JSONP示例:井字棋
446444

447445
我们来看一个使用JSONP的井字棋游戏示例,玩家就是客户端(浏览器)和服务器。它们两者都会产生1到9之间的随机数,我们使用JSONP去取服务器产生的数字(图8-2)。

0 commit comments

Comments
 (0)