【问题标题】:Is there any specification saying what is still considered as valid JSONP?是否有任何规范说明什么仍然被认为是有效的 JSONP?
【发布时间】:2012-02-22 04:46:44
【问题描述】:

我需要在 .NET 中解析 JSONP 消息并在这些消息中找到 JSON。是否有任何描述有效 JSONP 消息的最新规范?

我发现 Bob Ippolito 的 this blog post(从 2005 年开始)指定了第一个 JSONP 提案,其中 JSONP 消息可以包含几乎任何 JavaScript 代码。

我还在 json-p.org 上发现了一个可能的 more recent specification,它只允许函数调用在名为 callback 的请求 URI 参数中指定的函数。

最后Wikipedia 说:

虽然填充(前缀)通常是回调的名称 在浏览器的执行上下文中定义的函数, 它也可以是变量赋值、if 语句或任何其他 JavaScript 语句。对 JSONP 请求的响应(即 遵循 JSONP 使用模式的请求)不是 JSON,也不是 解析为 JSON;返回的有效负载可以是任意 JavaScript 表达式,它根本不需要包含任何 JSON。但 按照惯例,它是一个调用函数的 JavaScript 片段 调用一些 JSON 格式的数据。

那么,是否有任何全局定义是什么使得有效的 JSONP 响应以及允许哪些 JavaScript 构造?我是否应该期待任何 JavaScript 代码,因为这是当前浏览器接受的(因为它具有 application/javascript 内容类型)?

【问题讨论】:

    标签: javascript json jsonp


    【解决方案1】:

    由于 JSONP 是一种模式而不是一种语言(就像 JSON 一样),因此没有标准。

    顾名思义,您将获得一个包装在函数调用中的有效 JSON 对象。

    确实,告诉您响应中将包含什么内容的“规范”应该是 API you're subscribing to to document 的内容。

    【讨论】:

      【解决方案2】:

      它实际上可以是任何有效的 JavaScript,因为它的作用是在页面上附加一个新的脚本标签。您看到callback({...JSON...}) 的原因是因为它正在调用您传递到脚本标记URL 的回调函数。但是,您可以将整个 Web 应用程序的函数调用和其他内容放在同一个有效负载中。

      您应该研究跨域资源共享作为 JSONP 的替代方案。它允许常规 AJAX 使用添加一些 HTTP 标头直接跨源对话。它是 JSONP 的一个很好的替代方案,它受到 GET 请求的限制(大多数(如果不是全部)IE 版本的 URL 限制为 2083 个字符)。

      【讨论】:

        猜你喜欢
        • 2011-11-12
        • 2019-06-26
        • 1970-01-01
        • 2018-08-28
        • 1970-01-01
        • 1970-01-01
        • 2012-12-30
        • 2016-04-18
        • 1970-01-01
        相关资源
        最近更新 更多