ajax详解_动力节点Java学院整理

2019-09-14 06:47:20王冬梅

JSON+Padding

原始 JSON 提议的一个显著增强是 JSON+Padding (JSONP)。正如您所看到的,XMLHttpRequest 对象有一个严格的安全模型,只支持使用与请求页面相同的域名和协议进行通信。JSONP 在这个跨域限制上创建了一种更为灵活的方法,将 JSON 响应包装到一个用户定义或系统提供的回调函数中。将 JSON 脚本添加到文档之后,该方法将会提供即时数据访问。该模式现在很常见,对于许多较大的 Web 服务,可以采用该实践来支持混搭应用和其他内容联合。

尽管 JSONP 非常流行,但它有一个明显的便于恶意代码入侵的漏洞。因为来自第三方的脚本标记注入允许所有内容在主机页面上运行,所以,在数据提供者受到威胁时,或者主机页面没有留意插入页面的资源时,恶意入侵潜能将会令人想象。

现在,您已经对 Ajax 历史有所了解,接下来我们将开始探讨将魔法变成现实的技术。尽管,一般的 JavaScript API 书籍在图书馆中随处可见,但即使对于经验丰富的开发人员,了解底层工作原理仍然是具有启发意义的。

XMLHttpRequest API 和特性

尽管可以使用其他技术从服务器中返回数据,但是 XHR 仍然是大多数 Ajax 交互的核心。XHR 交互由两部分组成:请求和响应。下面我们将逐个介绍。

安全模型

正如上面所提到的,原始 XMLHttpRequest 对象有一个严格的安全模型。这个同源策略只 允许使用与请求页面相同的主机、协议和端口进行通信。这意味着不同域(example.com 和 example2.com)、不同主机(my.example.com 和 www.example.com)、不同协议(http://example.com 和 https://example.com)之间的通信是禁止的,这会产生错误消息。

随着第二版 XHR 对象的开发,新的跨域请求协议工作将在 W3C 中完成,大量实现工作由浏览器供应商完成,针对跨域请求的机制目前仅在 Internet Explorer 8+、Mozilla Firefox 3.5+、Apple Safari 4+ 以及 Google Chrome 中提供。尽管发展已经放缓,但仍在请求中发送了一个特定 “Origin” 报头:

Origin: http://example.com

并将服务器配置为发送回一个匹配的 “Access-Control-Allow-Origin” 报头:

Access-Control-Allow-Origin: :http://example.com

现在,可以使用 XHR 对象跨域进行双向通信了。

请求

请求端有 4 种方法:

    open() 发起服务器连接。可以带参数:
      method。将要使用的 HTTP 方法(可以是 POST 或者 GET) url。请求的 URL async。 可选布尔参数,表明请求是否异步(该参数的默认值为 Ture) user。一个可选用户名,供认证使用 password。一个可选密码,供认证使用