这是有效的 JSONP 响应吗?



如果这是一个非常基本的问题,请道歉。我是第一次使用 JSONP,并尝试编写一些 JQuery 来获取跨域数据并从中提取一些元素。

如果我输入服务的 URL,我会得到以下响应

(function(){
var data = {
status: 1,
content: {"name":"charliebrown", "resultCode":"0", "messageID":"1234"}
};
try{
;
}catch(ex){}
})();

当我在尝试使用 jQuery.parseJSON() 之类的东西之前检查格式正确的 JSON 响应时,这将失败验证检查。

我应该期望响应是这样的吗?

my_jsonp_callback (
{"name":"charliebrown", "resultCode":"0", "messageID":"1234"}
)

我只对原始回复的"内容"部分感兴趣。我假设我可能没有从服务器收到有效的 JSONP 响应是否正确?

假设 try/catch 块为空,因为您没有在 URL 中放入callback=something,那么......"也许吧"。

JSONP 不是一个定义明确的格式。问题中的第二个代码块显示了典型的JSONP 响应,但 JSONP 真正需要做的就是调用一个函数并向其传递一些数据。

(回到典型的响应,它本身可能容易受到罗塞塔闪光灯的攻击。现在Adobe已经修复了这个安全漏洞,这不是一个真正的问题,但它确实解释了为什么典型的JSONP响应可能是不可取的)

鉴于我在第一段中提到的假设,您将获得something(data);而不是;底行的第三行,这将作为 JSONP 成功执行。

如果我的假设是错误的,那么该代码根本不做任何事情,这使得它完全没有意义。

(这突出了JSONP是JavaScript的事实,并且您请求它的服务可以在响应中运行他们喜欢的任何JS,这使您可以遇到XSS问题。令人高兴的是,我们现在有了 CORS,它解决了 JSONP 解决的所有问题,但以更干净、更灵活的方式)。

最新更新