JavaScript 技術 -- JSON 與 JSONP

JavaScript

簡介

歷史

開發工具

基本語法

運算式

分枝

迴圈

函數

陣列

物件導向

原型

封裝

繼承

多型

this

控制流程

進階功能

Eval 函數

Closure

JSONP

小書籤

字串

正規表達式

除錯方法

伺服端

播 midi

cookie

套件

ccc函式庫

2D 繪圖

3D 繪圖

影像處理

訊號處理

語音處理

數學計算

tex 數學式

格式轉換

桌面應用

自然語言

地理資訊

平台

Node.js

jQuery

Google

numeric.js

Titanium

引擎

語法

作品

翻譯精靈

繪圖精靈

DotWiki

流程

前端工程師

後端工程師

css

訊息

相關網站

參考文獻

最新修改

簡體版

English

JSON 資料交換格式

目前網路上最常使用的資料交換格式是 XML,但是 XML 文件很繁瑣且囉嗦,讓使用者撰寫不方便,而且不容易嵌入網頁中進行處理。為了讓網頁上的共通程式語言 JavaScript 可以輕易的交換資料,甚至將資料當成程式進行處理,於是根據 JavaScript 的物件宣告寫法,發展出一種簡捷的資料交換格式,稱為 JSON (Javascript Object Notation),您可以將 JSON 當成資料,或者直接當成 JavaScript 程式,並利用 eval() 函數執行該程式。

以下是一個採用 JSON 格式的朋友資料範例,該範例中有兩個朋友,一個是 John, 22 歲,另一個是 Mary, 28 歲。

範例一:以 JSON 宣告兩個朋友的資料

{
  "friends": [
     {"name": "John", "age": 22 }
     {"name": "Mary", "age": 28 }
  ]
}

JSON 雖然可以直接內嵌在 JavaScript 當中使用,例如您可以用 eval() 函數直接執行某段 JASON 程式,但是由於瀏覽器的安全限制問題,會禁止跨越網域的 JSON 程式碼執行。這是因為瀏覽器採用了 Sandbox (沙盒)機制所引起的。

JSONP — 動態載入 JavaScript 的方法

為了讓 JSON 程式碼可以被傳遞後執行,於是發展出了 JSONP (JSON with Padding) 這個非官方協議,JSONP 繞過了瀏覽器的安全限制問題,利用 JavaScript Callback 機制。其方法是利用 JavaScript 動態的載入程式到 <script src="…"> 標記的 src 欄位中,以便載入外部的 JSON 資料或 JavaScript 函式庫到網頁中使用的方法。

以下是 Google Code Playground 當中所提供的一個範例,其中的 script.src="….." 與 document.getElementsByTagName('head')[0].appendChild(script); 是 JSONP 的關鍵程式,您可以仔細觀察其中所使用的 JSONP 技巧。

<!--
  copyright (c) 2009 Google inc.
 
  You are free to copy and use this sample.
  License can be found here: http://code.google.com/apis/ajaxsearch/faq/#license
-->
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Javascript API Samples</title>
  </head>
  <body style="font-family: Arial;border: 0 none;">
    <div id="content"></div>
    <script type="text/javascript">
    /*
     * A technique for avoiding browsers' cross-domain restriction
     * Allows you to request information cross-domain from client
     * You request a script from a cross domain
     * That service must respond in JSON wrapped in a function call you specify
    */
 
    function myFunc() {
      if (typeof console != 'undefined') {
        console.log(arguments);
      } else {
        alert('click debug button');
      }
    }
 
    var script = document.createElement('script');
    script.src = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Dog&callback=myFunc';
    script.type = 'text/javascript';
    document.getElementsByTagName('head')[0].appendChild(script);
    </script>
  </body>
</html>

您可以點選 Google Code Playground - JSONP 的網址已執行該範例,其網址如下。

http://code.google.com/apis/ajax/playground/#jsonp

參考文獻

  1. Introducing JSON — http://www.json.org/
  2. JSON & JSONP 簡介 — http://herolin.mine.nu/entry/intro-json-jsonp (用手摀住我的嘴 , 專業技術/Java Script 2009/01/04 10:13)

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License