<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-9  評論-168  文章-266  trackbacks-0


    1.JSONP(JSON with Padding-填充json數(shù)據(jù)也就是常用的json跨域方式):利用script標(biāo)簽,通過特定的src地址的調(diào)用,來執(zhí)行一個客戶端的js函數(shù),在 服務(wù)器端生成相對的數(shù)據(jù)(json格式)并以參數(shù)的形式傳遞給這個客戶端的js函數(shù)并執(zhí)行這個函數(shù),前提是需要服務(wù)器端的數(shù)據(jù)輸出支持。       

    2.為什么使用JSONP:由于 JSON 只是一種含有簡單括號結(jié)構(gòu)的純文本,因此許多通道都可以交換 JSON 消息。因?yàn)橥床呗缘南拗疲覀儾荒茉谂c外部服務(wù)器進(jìn)行通信的時候使用 XMLHttpRequest。而JSONP是一種可以繞過同源策略的方法,即通過使用 JSON 與 <script> 標(biāo)記相結(jié)合的方法,從服務(wù)端直接返回可執(zhí)行的JavaScript函數(shù)調(diào)用或者JavaScript對象。       

    3.誰在使用JSONP:dojo、JQuery、Youtube GData API 、Google Social Graph API 、Digg API 、GeoNames webservice、豆瓣API、Del.icio.us JSON API等。

    ------------------------------------------------------------------------------------------------


    和 AJAX 一樣,JSONP 實(shí)際上也是早已存在,只是說法相對比較新穎(貌似也出來很久了)。自 1.2 版本起,JQuery加入了對 JSONP 的支持(http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback)。我們可以很容易的利用 $.getJSON() 方法(或者其它基于 $.ajax() 的方法),來跨域加載 JSON 數(shù)據(jù)。我參考官網(wǎng),寫了個JQ測試的例子:

    a.html

    <html>
    <head>
      <script src=">
    </head>
    <body>
    <script type="text/javascript">
    function do_jsonp() {
        $.getJSON("
        function(data) {
            $('#result').val('My name is: ' + data.nick);
        });
    }
    </script>
    <a href="javascript :do_jsonp();">Click me</a><br />
    <textarea id="result" cols="50" rows="3"></textarea>
    </body>
    </html>

    profile2.php

    <?php
    $callback = isset($_GET['callback']) ? $_GET['callback'] : '';
    $json = '';

    //php數(shù)組
    $arr = array(
         'name' => 'lava',
         'nick' => '比目魚',
         'contact' => array(
          'MSN' => 'lavaguo#msn.com',
             'email' => 'guo.feng#zol.com.cn',
             'website' => 'http://www.zol.com.cn',
         )
     );

    $arr = gb2312ToUtf8($arr);//中文需要轉(zhuǎn)UTF-8
    $json = json_encode($arr);//轉(zhuǎn)成json數(shù)組
    if (!empty($callback)) {
        $json = $callback . '(' . $json . ')';//注意這里的格式,調(diào)試時這里費(fèi)了點(diǎn)時間
    }
    echo $json;

    function gb2312ToUtf8(&$input)
    {
        if (!is_array($input)) {
            $input = iconv('GB2312', 'UTF-8', $input);
        } else {
            foreach ($input as $k=>$v) {
                gb2312ToUtf8(&$input["$k"]);
            }
        }
        return $input;
    }

    ?>

    你可能注意到上面的例子中,url 被寫成了http://active.zol.com.cn/guofeng/profile2.php?callback=?,需要說明的是,這個問號會被 jQuery 自動替換為回調(diào)函數(shù)的函數(shù)名(如果是一個匿名函數(shù),JQuery 會自動生成一個帶時間戳的函數(shù)名)。

    總結(jié)下JSONP原理:

    首先在客戶端注冊一個callback, 然后把callback的名字傳給服務(wù)器。

    此時,服務(wù)器先生成 json 數(shù)據(jù)。 

    然后以 javascript 語法的方式,生成一個function , function 名字就是傳遞上來的參數(shù) jsonp.

    最后將 json 數(shù)據(jù)直接以入?yún)⒌姆绞剑胖玫?function 中,這樣就生成了一段 js 語法的文檔,返回給客戶端。

    客戶端瀏覽器,解析script標(biāo)簽,并執(zhí)行返回的 javascript 文檔,此時數(shù)據(jù)作為參數(shù),傳入到了客戶端預(yù)先定義好的 callback 函數(shù)里.(動態(tài)執(zhí)行回調(diào)函數(shù))

                轉(zhuǎn)自:http://blog.zol.com.cn/859/article_858048.html

    posted on 2009-11-25 15:36 紫蝶∏飛揚(yáng)↗ 閱讀(1220) 評論(0)  編輯  收藏 所屬分類: JQuery
    主站蜘蛛池模板: 亚洲精品美女久久7777777| 国产h视频在线观看网站免费| 亚洲中文久久精品无码1| 红杏亚洲影院一区二区三区| 精品国产精品久久一区免费式| 91老湿机福利免费体验| a级精品九九九大片免费看| 美女视频黄频a免费大全视频| 亚洲人成影院在线高清| 亚洲酒色1314狠狠做| 日本亚洲欧洲免费天堂午夜看片女人员 | 黄色网址在线免费观看| 亚洲日本久久久午夜精品| 亚洲黄色一级毛片| 久久久久亚洲AV片无码| 中文字幕不卡亚洲| 亚洲午夜无码片在线观看影院猛| 亚洲中文无码永久免费| 久热中文字幕在线精品免费| 最近中文字幕完整免费视频ww| 玖玖在线免费视频| 日本免费高清视频| 男人的天堂网免费网站| 麻豆精品不卡国产免费看| 久久国产美女免费观看精品| 一区二区三区免费看| 免费精品国自产拍在线播放| 精品国产日韩亚洲一区在线| 麻豆亚洲AV成人无码久久精品 | 69成人免费视频| 噼里啪啦免费观看高清动漫4| 最好看的中文字幕2019免费| 最近2019中文字幕免费直播 | 亚洲综合色丁香麻豆| 亚洲视频一区网站| 亚洲国产品综合人成综合网站| 亚洲日韩乱码久久久久久| 亚洲一区二区三区不卡在线播放| 亚洲乱码一区二区三区国产精品| 一本色道久久88亚洲精品综合| 色欲aⅴ亚洲情无码AV蜜桃|