我需要在.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
内容类型)?
答案 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限制。)