最近更新: 2007-02-23

網路服務與純 JavaScript 應用之 JSON 資料包裹解決方案, Google 的方式

Tags: ajax json web2.0

我在 網路服務與純 JavaScript 應用之 JSON 資料包裹解決方案 提到的概念,其實最初也是在 Google 上看到這種概念。只是我那時寫著寫著,卻忘了 Google 的方式... 網友忘幽谷提醒才想起。

Google 查詢服務回傳的資料格式是它自家的 GData 文件 (GData uses either of two standard XML-based syndication formats: Atom or RSS) 。為了讓使用者能建立純 JavaScript 應用, Google 就提供了將 GData 資料內容改用 JSON 格式包裹在 JavaScript 程式碼中的服務方式。

Google 的方式

前文 (網路服務與純 JavaScript 應用之 JSON 資料包裹解決方案) 將 JSON 資料包裹在指派變數的程式碼。 Google 採用了更簡單的方式 (Google 的 GData APIs 以 Using JSON with Google Data APIs 所說的方式,讓使用者可以 JavaScript 建立網頁應用工具),其將 JSON 資料視為引數,傳遞給使用者指定的回呼函數 (callback) 。回呼函數的名稱需以查詢字串的方式添加在查詢服務的 URL 格式 (此時的 URL 格式不符合嚴謹的 REST 格式),例如:http://example.com/ID/bookmark.js?callback=queryHandler ,而查詢服務依使用者指定的函數名稱回傳下列程式碼:

queryHandler(
    {   /*JSON data*/
        'title' : '書籤標題',
        'link' : 'http://example.com/',
        'description' : '書籤說明、引述...'
    }
);

對照前文最後一段範例程式碼,則使用者載入方式便是將回呼函數名稱添加在第10行 restJs.src 的 URL 之後,並且可以省去輪詢動作 (第13到21行) 。

function queryHemidemiUsersHandler() {
    window.alert('有 ' + Hemidemi.users.items.length + ' 人收藏此文章。');
}

function queryHemidemiUsers() {
    var restId = encodeURIComponent(document.URL);
    var restUrl = 'http://www.hemidemi.com/bookmark/' + restId + '/users.js';
    var restJs = document.createElement('script');
    restJs.type = 'text/javascript';
    restJs.src = restUrl + '?callback=queryHemidemiUsersHandler';
    document.getElementsByTagName('head')[0].appendChild(restJs);
}

if (window.attachEvent) window.attachEvent('onload', queryHemidemiUsers);
else window.addEventListener('load', queryHemidemiUsers, false);
相關文章
樂多舊網址: http://blog.roodo.com/rocksaying/archives/2760853.html