是否有任何规范说仍然被认为是有效的JSONP?

时间:2012-01-30 11:22:36

标签: javascript json jsonp

我需要在.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请求的响应(即,a   遵循JSONP使用模式的请求)不是JSON而不是   解析为JSON;返回的有效负载可以是任意JavaScript   表达式,它根本不需要包含任何JSON。但   通常,它是一个调用函数的JavaScript片段   调用一些JSON格式的数据。

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

2 个答案:

答案 0 :(得分:2)

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

它的名字意味着你将获得一个包含在函数调用中的有效JSON对象。

事实上,“规范”会告诉您响应中包含的内容应该适用于API you're subscribing to to document

答案 1 :(得分:2)

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

您应该将跨源资源共享作为JSONP的替代方案。它允许常规AJAX使用添加一些HTTP头直接跨源进行通信。它是JSONP的一个很好的替代品,它受到GET请求的限制(在IE的大多数(如果不是全部)版本中都有2083个字符URL限制。)