什么是JSONP?

这个问题在这里已经有了答案:

  • 任何人都可以用通俗的话来解释JSONP是什么? 4个答案

  • 其实并不复杂......

    假设您位于example.com域,并且您想向域example.net发出请求。 要做到这一点,你需要跨越领域的界限,在大多数浏览器领域都是不允许的。

    绕过这个限制的一个条目是<script>标签。 当您使用脚本标记时,域限制将被忽略,但在正常情况下,您无法对结果进行任何操作,只会对脚本进行评估。

    输入JSONP。 当您向启用了JSONP的服务器发出请求时,您会传递一个特殊参数,告诉服务器关于您的页面的一些信息。 这样,服务器就可以很好地将其响应以您的页面可以处理的方式包装起来。

    例如,假设服务器需要一个名为“callback”的参数来启用其JSONP功能。 然后您的请求将如下所示:

    http://www.example.net/sample.aspx?callback=mycallback
    

    没有JSONP,这可能会返回一些基本的JavaScript对象,如下所示:

    { foo: 'bar' }
    

    但是,使用JSONP时,当服务器收到“回调”参数时,它将结果稍微区分一下,返回如下所示的内容:

    mycallback({ foo: 'bar' });
    

    正如你所看到的,它现在将调用你指定的方法。 所以,在你的页面中,你定义了回调函数:

    mycallback = function(data){
      alert(data.foo);
    };
    

    现在,当脚本被加载时,它将被评估,并且你的函数将被执行。 Voila,跨域请求!

    同样值得注意的是JSONP的一个主要问题:您失去了对请求的很多控制。 例如,没有“好”的方法来获取适当的失败代码。 结果,你最终使用定时器来监视请求等,这总是有点可疑。 JSONRequest的提议是允许跨域脚本编写,维护安全性并允许正确控制请求的一个很好的解决方案。

    现在(2015年),CORS是推荐的方法与JSONRequest。 JSONP对于较老的浏览器支持仍然有用,但考虑到安全隐患,除非您没有选择,否则CORS是更好的选择。

    链接地址: http://www.djcxy.com/p/8327.html

    上一篇: What is JSONP all about?

    下一篇: How to pretty print XML from Java?