我有一个项目,要使用Jquery Mobile制作移动Web应用程序。我希望我的应用程序能够消耗来自跨域REST Web服务的数据。许多人说要使用JSONP。但我仍然不清楚如何使用它以及如何构建支持JSONP输出的REST Web服务。是否有人可以帮助我解释一下JSONP的工作原理?或者有没有这种情况的示例代码?谢谢。
JSONP是客户端请求,而REST服务则是服务器端请求(仅适用于跨域API服务)。它们在处理过程方面有所不同。
JSONP:
您可以使用javascript或jquery ajax方法实现JSONP。使用jquery实现是最简单的方式。JSONP是一种类型,可以动态地将javascript脚本包含在您的html文档中。因此,您可以动态调用js函数。
有很多资源可用于JSONP实现。我推荐下面这个链接:
下面是一个简单的jquery ajax函数,它触发了对经度和纬度的jsonp请求。
$.ajax({
type: "GET",
dataType: "jsonp",
cache: false,
url: 'http://api.ipinfodb.com/v3/ip-city/?key=b518527dd751af36c974e0adcdc4cb329917df46c006a72bf92858dd7c059488&ip=<?=$client_ip?>&format=json',
success: function(data) {
alert(data.latitude+":"+data.longitude)
},
error: function(){
alert('Could not able to find location!');
}
});
请查看此文章了解REST实现。
希望这能对您有所帮助。
关于何为RESTful Web服务,目前还没有统一的标准。定义可能包括以下内容:
- API URL路径反映对象模型,例如user/43/comment/?datetime=01022013
- HTTP动词反映更改的性质,例如GET
不应该写入数据等。
- HTTP响应代码映射到响应状态,例如仅在没有错误时返回200 OK
。
JSONP是一种跨域请求的方式,可以避免浏览器上的CORS安全问题。虽然JS框架可能会将现实抽象化,但在幕后,JSONP会将一个<script>
标签插入页面的DOM中。JSONP URL标准地包括一个查询参数callback=<<nameForCallback>>
。响应以JavaScript形式呈现,格式如下:nameForCallback({ error: false, myData: "banana"});
JSONP始终使用GET
作为其HTTP动词。API应该始终返回2XX
状态码,即使出现错误,因为否则浏览器将忽略响应有效载荷(它们将无法被您的JavaScript代码访问)。
这些事实排除了许多被认为是RESTful服务的API设计方面。如果你绝对必须使用JSONP(解决CORS问题不可能),你仍然可以将一些有益于API设计的RESTful特性纳入其中,例如反映数据模型的路径路由等。