代码之家  ›  专栏  ›  技术社区  ›  hvgotcodes

JSONP是否需要修改服务器?

  •  31
  • hvgotcodes  · 技术社区  · 14 年前

    我理解JSONP是一种绕过同一源策略的技术。您基本上是在脚本标记中引用JSON服务服务器端点,因为脚本标记不受SO策略的约束。

    我的问题是:假设一个服务器有一个为JSON提供服务的端点,那么服务器上是否有任何必要的修改来使用客户机中的JSONP?

    我想不是,但我想确定…

    1 回复  |  直到 13 年前
        1
  •  36
  •   Nick Craver    14 年前

    是的,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。