如果这是一个非常基本的问题,请道歉。我第一次使用JSONP并尝试编写一些JQuery来获取跨域数据并从中提取一些元素。
如果我输入服务的网址,我会收到以下回复
(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响应,我是否正确?
答案 0 :(得分:1)
假设try / catch块为空,因为你没有将callback=something
放入URL中,那么......"可能"。
JSONP不是一个定义良好的格式。你问题中的第二个代码块显示了一个典型的 JSONP响应,但是所有JSONP真正需要做的就是调用一个函数并传递一些数据。
(回到典型的反应,它本身很容易受到Rosetta Flash的攻击。现在Adobe已经修复了这个安全漏洞并不是一个问题,但它确实解释了为什么典型的JSONP回应可能是不受欢迎的)
根据我在第一段中提到的假设,你会得到something(data);
而不是;
来自底线的第三个,这将成功地作为JSONP执行。
如果我的假设是错误的,那么该代码什么都不做,这使得它完全没有意义。
(这突出了这样一个事实,即JSONP是JavaScript,你请求它的服务可以在响应中运行他们喜欢的任何JS,这可以解决XSS问题。很高兴我们现在有了CORS,它解决了所有问题JSONP解决的问题,但更简洁,更灵活。)