这是一个有效的JSONP用途吗?

时间:2016-06-23 13:33:50

标签: javascript jquery ajax jsonp

如果这是一个非常基本的问题,请道歉。我第一次使用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响应,我是否正确?

1 个答案:

答案 0 :(得分:1)

假设try / catch块为空,因为你没有将callback=something放入URL中,那么......"可能"。

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

(回到典型的反应,它本身很容易受到Rosetta Flash的攻击。现在Adobe已经修复了这个安全漏洞并不是一个问题,但它确实解释了为什么典型的JSONP回应可能是不受欢迎的)

根据我在第一段中提到的假设,你会得到something(data);而不是;来自底线的第三个,这将成功地作为JSONP执行。

如果我的假设是错误的,那么该代码什么都不做,这使得它完全没有意义。

(这突出了这样一个事实,即JSONP是JavaScript,你请求它的服务可以在响应中运行他们喜欢的任何JS,这可以解决XSS问题。很高兴我们现在有了CORS,它解决了所有问题JSONP解决的问题,但更简洁,更灵活。)