28
据我所知,jsonp是一种绕过同一起源策略的技术。您基本上是在脚本标记中引用您的json服务服务器端点,因为脚本标记不受SO策略的限制。JSONP是否需要修改服务器?
我的问题是:假设一个服务器有一个提供json的端点,服务器上是否需要修改以便在客户端使用jsonp?
我觉得没什么,但要确保....
据我所知,jsonp是一种绕过同一起源策略的技术。您基本上是在脚本标记中引用您的json服务服务器端点,因为脚本标记不受SO策略的限制。JSONP是否需要修改服务器?
我的问题是:假设一个服务器有一个提供json的端点,服务器上是否需要修改以便在客户端使用jsonp?
我觉得没什么,但要确保....
没错,JSONP略有不同,当它呈现,让您的服务器需要支持它。
JSON看起来是这样的:
{ "name": "value" }
而JSONP是这样的:
functionName({ "name": "value" });
如果无论你使用它,你会覆盖支持,但它是不一样的只是支持JSON。当服务器收到一个请求,例如:http://example.com/json?callback=functionName
,上面是你应该呈现什么样的,因为它的外观在页面是这样的:
<script type="text/javascript" src="http://example.com/json?callback=functionName"></script>
这意味着运行需要返回的东西,作为一个例证,这是有效的:
<script type="text/javascript">
functionName({ "name": "value" });
</script>
如果您的服务器没有支持JSONP这将有效地是这样的:
<script type="text/javascript">
{ "name": "value" }
</script>
...你会得到语法错误,因为这不是有效的JavaScript。
和你的js代码必须实现functionName?是否需要评估json以获取js对象? – hvgotcodes 2010-07-21 01:37:33
@hvgotcodes - 是的,客户端具有该功能(例如jQuery默认创建一个动态)。它是传递给函数的JSON(JSON是有效的对象文字符号,只是它的一个子集),所以不需要执行'eval()'。 – 2010-07-21 01:40:05
我不明白你为什么不需要评估它。不管jsonp,大多数js库都不会评估通过xhrs返回的json来获取json代表的实际js对象吗? – hvgotcodes 2010-07-21 01:44:01