JSONP是否需要修改服务器?

hvg*_*des 31 ajax jsonp ria server-side

我知道jsonp是一种绕过相同原始策略的技术.您基本上是在脚本标记中引用您的json服务器端点,因为脚本标记不受SO策略的约束.

我的问题是:假设服务器有一个服务于json的端点,服务器上是否需要进行任何修改以在客户端中使用jsonp?

我想不,但想确定......

Nic*_*ver 36

是的,JSONP在呈现时略有不同,因此您的服务器需要支持它.

JSON看起来像这样:

{ "name": "value" }
Run Code Online (Sandbox Code Playgroud)

而JSONP看起来像这样:

functionName({ "name": "value" });
Run Code Online (Sandbox Code Playgroud)

如果您使用的任何东西支持它,那么您将被覆盖,但它与仅支持JSON不同.当服务器获取请求时,例如: http://example.com/json?callback=functionName,以上是您应该呈现的内容,因为它在页面中的外观如下所示:

<script type="text/javascript" src="http://example.com/json?callback=functionName"></script>
Run Code Online (Sandbox Code Playgroud)

这意味着需要返回运行的东西,例如,这是有效的:

<script type="text/javascript">
  functionName({ "name": "value" });
</script>
Run Code Online (Sandbox Code Playgroud)

如果你的服务器支持JSONP,它实际上是这样的:

<script type="text/javascript">
  { "name": "value" }
</script>
Run Code Online (Sandbox Code Playgroud)

...而且你会得到语法错误,因为那不是有效的JavaScript.