WEB开发网
开发学院网页设计JavaScript 使用 JSONP 实现跨域通信,第 1 部分: 结合 JSONP... 阅读

使用 JSONP 实现跨域通信,第 1 部分: 结合 JSONP 和 jQuery 快速构建强大的 mashup

 2010-03-09 00:00:00 来源:WEB开发网   
核心提示: 前面已经提到,同源策略不阻止将动态脚本元素插入文档中,使用 JSONP 实现跨域通信,第 1 部分: 结合 JSONP 和 jQuery 快速构建强大的 mashup(4),也就是说,可以动态插入来自不同域的 JavaScript,如何才能将其转换为真正的 JSONP 服务呢?可使用的方法很多,

前面已经提到,同源策略不阻止将动态脚本元素插入文档中。也就是说,可以动态插入来自不同域的 JavaScript,并且这些域都携带 JSON 数据。这其实是真正的 JSONP(JSON with Padding):打包在函数调用中的 JSON 数据。注意,为了完成该操作,Web 页面必须在插入时具有已经定义好的回调函数,也就是我们例子中的 showPrice()。

不过,所谓的 JSONP 服务(或 Remote JSON Service)是一种带有附加功能的 Web 服务,该功能支持在特定于用户的函数调用中打包返回的 JSON 数据。这种方法依赖于接受回调函数名作为请求参数的远程服务。然后该服务生成对该函数的调用,将 JSON 数据作为参数传递,在到达客户端时将其插入 Web 页面并开始执行。

jQuery 的 JSONP 支持

从 1.2 版本开始,jQuery 拥有对 JSONP 回调的本地支持。如果指定了 JSONP 回调,就可以加载位于另一个域的 JSON 数据,回调的语法为:url?callback=?。

jQuery 自动将 ? 替换为要调用的生成函数名。清单 4 显示了该代码。

清单 4. 使用 JSONP 回调

jQuery.getJSON(url+"&callback=?", function(data) { 
  alert("Symbol: " + data.symbol + ", Price: " + data.price); 
}); 

为此,jQuery 将一个全局函数附加到插入脚本时需要调用的窗口对象。另外,jQuery 也能优化非跨域调用。如果向同一个域发出请求,jQuery 就将其转化为普通 Ajax 请求。

使用 JSONP 支持的示例服务

在上一个例子中,使用了静态文件(ticker.js)将 JavaScript 动态插入到 Web 页面中。尽管返回了 JSONP 回复,但它不允许您在 URL 中定义回调函数名。这不是 JSONP 服务。因此,如何才能将其转换为真正的 JSONP 服务呢?可使用的方法很多。这里我们将分别使用 PHP 和 Java 展示两个示例。

编缉推荐阅读以下文章

  • 使用 JSONP 实现跨域通信,第 2 部分: 使用 JSONP、jQuery 和 Yahoo! 查询语言构建 mashup

上一页  1 2 3 4 5 6  下一页

Tags:使用 JSONP 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接