zoukankan      html  css  js  c++  java
  • JSONP数据调用

     json 是一种数据格式
     jsonp 是一种数据调用的方式。
    什么是JSONP
             为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
             JSONP的优点是:它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;它的兼容性更好,在更加古老的浏览器中都可以运行,不需要XMLHttpRequest或ActiveX的支持;并且在请求完毕后可以通过调用callback的方式回传结果。
     
    1、ajax和jsonp这两种技术在调用方式上“看起来”很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jquery和ext等框架都把jsonp作为ajax的一种形式进行了封装;
    2、但ajax和jsonp其实本质上是不同的东西。ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加script标签来调用服务器提供的js脚本。
    3、所以说,其实ajax与jsonp的区别不在于是否跨域,ajax通过服务端代理一样可以实现跨域,jsonp本身也不排斥同域的数据的获取。
    4、还有就是,jsonp是一种方式或者说非强制性协议,如同ajax一样,它也不一定非要用json格式来传递数据,如果你愿意,字符串都行,只不过这样不利于用jsonp提供公开服务。
     
    W3C上的例子:

    JSONP 教程

        本章节我们将向大家介绍 JSONP 的知识。

        Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

        为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP )呢?这是因为同源策略。

    同源策略,它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。

    JSONP应用

    1. 服务端JSONP格式数据

    如客户想访问 : http://www.runoob.com/try/ajax/jsonp.php?jsonp=callbackFunction。

    假设客户期望返回JSON数据:["customername1","customername2"]。

    真正返回到客户端的数据显示为: callbackFunction(["customername1","customername2"])。

    服务端文件jsonp.php代码为:

    jsonp.php 文件代码

    <?php
    header('Content-type: application/json');
    //获取回调函数名
    $jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);
    //json数据
    $json_data ='["customername1","customername2"]';
    //输出jsonp格式的数据
    echo $jsoncallback ."(". $json_data .")";
    ?>

    2.客户端实现 callbackFunction 函数

    <script type="text/javascript">
    function callbackFunction(result, methodName)
    {
    var html ='<ul>';
    for(var i =0; i < result.length; i++)
    {
    html +='<li>'+ result[i]+'</li>';
    }
    html +='</ul>';
    document.getElementById('divCustomers').innerHTML = html;
    }
    </script>

    页面展示

    <div id="divCustomers"></div>

    客户端页面完整代码

    <!DOCTYPE html>
    <html>
    <head>
    <metacharset="utf-8">
    <title>JSONP 实例</title>
    </head>
    <body>
    <divid="divCustomers"></div>
    <scripttype="text/javascript">
    function callbackFunction(result, methodName)
    {
    var html ='<ul>';
    for(var i =0; i < result.length; i++)
    {
    html +='<li>'+ result[i]+'</li>';
    }
    html +='</ul>';
    document.getElementById('divCustomers').innerHTML = html;
    }
    </script>
    <scripttype="text/javascript"src="http://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction"></script>
    </body>
    </html>

    jQuery 使用 JSONP

    以上代码可以使用 jQuery 代码实例:
    <!DOCTYPE html>
    <html>
    <head>
    <metacharset="utf-8">
    <title>JSONP 实例</title>
    <scriptsrc="http://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script>
    </head>
    <body>
    <divid="divCustomers"></div>
    <script>
    $.getJSON("http://www.runoob.com/try/ajax/jsonp.php?jsoncallback=?",function(data){
    var html ='<ul>';
    for(var i =0; i < data.length; i++)
    {
    html +='<li>'+ data[i]+'</li>';
    }
    html +='</ul>';
    $('#divCustomers').html(html);
    });
    </script>
    </body>
    </html>
  • 相关阅读:
    API测试之Postman使用完全指南(Postman教程,这篇文章就够了)
    asp.net的webservice
    表和索引的结构(笔记)
    基于Nginx+PHP+Redis的短URL系统的实现 新风宇宙
    数据结构与算法(php版) 新风宇宙
    discuz7.2 昵称替换用户名 新风宇宙
    gVim7.3(Vim7.3)文本编辑器详细配置文件和配色方案 新风宇宙
    Discuz的Memcache缓存实现 新风宇宙
    GitHub使用(二) 从代码库下载代码到本地 新风宇宙
    PHPredis中文文档 新风宇宙
  • 原文地址:https://www.cnblogs.com/ChenChunChang/p/6628395.html
Copyright © 2011-2022 走看看