jQuery 跨域 AJAX
jQuery 的跨域调用实际上没有那么复杂,只要明白几个概念,有一定的 JavaScript 基础即可。
首先要了解 jQuery.getJSON 函数
jQuery.getJSON( url, [data], [callback] ) =============================================== [1] As of jQuery 1.2, you can load JSON data located on another domain if you specify a JSONP callback. [2] The callback takes the form "example.com?callback=?". [3] jQuery automatically replaces the '?' with a random method name that doesn't clash with the global scope. You do not have to specify the method name yourself. [4] Note that the site you're trying to call needs to support JSON-P output. The callback parameter might vary depending on the API, for instance Yahoo Pipes requires "_callback=?" [5] Keep in mind, that lines after this function will be executed before the callback.以上的英文确实不太容易明白,我就说一说:
- [1] 说的是:在 jQuery 1.2 版本就已经支持跨域了,是通过向其他域名的应用发起一个 JSONP 请求,返回的结果是一个 JSON 数据结构。至于什么是 JSON 数据结构,容我慢慢道来。
- [2] 说的是:跨域的 JSONP 请求的 URL 的格式应该包含一个 callback=? 的部分。至于为什么这个样子,你应该看看什么叫做 JSONP。
- [3] 说的是:jQuery 真的很有超级牛力,能够将跨域请求中的 callback=? 中的问号,通过一个随机字串来替换,这个随机字串保证全局的唯一性。具体参见 JSONP。
- [4] 说的是: 远程域(AJAX的服务器端),返回的结果应该是一个 JSONP 的输出,而不能仅仅是一个 JSON 的数据结构。
- [5] 说的是:getJSON 实际上是一个 AJAX 调用,是异步请求,因此放在 getJSON 后面的 JavaScript 语句也会先执行到。