乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      jsonp 進行 Javascript 的跨域數(shù)據(jù)訪問

       WindySky 2009-07-17
      ZOL博客 > 超音速毛豆的博客 > jsonp 進行 Javascript 的跨域數(shù)據(jù)訪問

      jsonp 進行 Javascript 的跨域數(shù)據(jù)訪問


      2008-11-24 20:52:35    技術 |  評論(3) |  瀏覽(3594)

        今天上午,路路同學問了一個JQuery跨域讀取json數(shù)據(jù)的問題。JQuery用得很少,還真沒實際試過。于是上網找個找,看到了JQ的$.getJSON() 方法。先介紹下概念性的東西,網上找的,簡單看看就行了。

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

      2.為什么使用JSONP:由于 JSON 只是一種含有簡單括號結構的純文本,因此許多通道都可以交換 JSON 消息。因為同源策略的限制,我們不能在與外部服務器進行通信的時候使用 XMLHttpRequest。而JSONP是一種可以繞過同源策略的方法,即通過使用 JSON 與 <script> 標記相結合的方法,從服務端直接返回可執(zhí)行的JavaScript函數(shù)調用或者JavaScript對象。       

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

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


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

      a.html

      <html>
      <head>
        <script src=" http://code.jquery.com/jquery-latest.js"></script>
      </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);//中文需要轉UTF-8
      $json = json_encode($arr);//轉成json數(shù)組
      if (!empty($callback)) {
          $json = $callback . '(' . $json . ')';//注意這里的格式,調試時這里費了點時間
      }
      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 自動替換為回調函數(shù)的函數(shù)名(如果是一個匿名函數(shù),JQuery 會自動生成一個帶時間戳的函數(shù)名)。

      總結下JSONP原理

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

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

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

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

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

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多