1 of 17

GOOGLE SPREADSHEET�AS A DATABASE

Ajax Get, Post

With powerful Google App Script

講者: 帥到無法顯示

2 of 17

DEMO

Serker helper(社課小幫手)

http://juncareasy.com/serker/

It may comes on stage too late.

3 of 17

MENU-1

Ajax

讓我們再認識一次吧

Asynchronous JavaScript and XML

非同步的JavaScript與XML技術)

現在更常用的是”Ajaj”

就是將XML以json取代

用來做什麼的呢?主要為get, post

抓取資料、送出資料

Ajax莫屬

更新網頁上的資料有兩種方法

「全部重載」、「局部重載」。

「全部重載」是必須整個刷新頁面才能看到更新後的資料;「局部重載」則是只更新要更新的部分,可以在原畫面就看到變化。

Which do you prefer?

4 of 17

MENU-1

何謂同步與非同步?

以大隊接力來做舉例

同步:

從一個隊伍來看,上一跑者必須將棒子交給下一跑者,下一跑者才能繼續跑。

非同步:

從比賽狀況來看,我方的跑者比別隊的跑者晚接到棒,但卻風馳電掣地超前該跑者,而提前將棒子交給我方的下一棒;反之亦然。

影響為何?

Solution:

$.when(), defer object

5 of 17

MENU-2

What is Google AppScript?

JavaScript + API of Google Files (Google Form, Docs, Spreadsheet and so on). 在這兩周, 我們會學常用的Google Sheet API.

Watch out!

在單純的AppScript中,並沒有jquery可以

直接使用。

優點:

● 雲端空間

● 架設簡單

● 資料視覺化程度高

● 可以用JavaScript來寫程式操

控每一格,就像Excel公式。

缺點:

● 效能較標準資料庫差

● 沒有高度穩定性

為何以Google試算表當作資料庫?

6 of 17

APPETIZER

常見以Google試算表當作資料庫

而未使用AppScript的情形

  • Google Form(表單)

優點:

● 平易近人

● 建置快速

● 一般統計情形相當適合

缺點:

● 必須透過Google表單

● 不方便做資料預處理

優點:

● 平易近人

● 建置快速

● 一般統計情形相當適合

缺點:

● 亦沒有彈性

● 安全性有疑慮

7 of 17

THE MAIN COURSE

1. 新增一個試算表

2. 點擊「工具」 > 「指令碼編輯器」

8 of 17

THE MAIN COURSE

3. 儲存專案

9 of 17

THE MAIN COURSE

4. 編輯Google AppScript程式碼

10 of 17

THE MAIN COURSE

var SCRIPT_PROP = PropertiesService.getScriptProperties();

(2). 執行Setup,跳出授權請同意

function setup() {

var doc = SpreadsheetApp.getActiveSpreadsheet();

SCRIPT_PROP.setProperty("key", doc.getId());

}

(1). 取得試算表(把拔)

var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));

(2). 取得特定工作表(小孩)

var SHEET_NAME = "工作表1";

var sheet = doc.getSheetByName(SHEET_NAME);

儲存程式碼後,先進行Setup步驟

如何取得試算表、工作表

也是最重要的一步

(1). 先宣告一變數指派「許可證」,該

「許可證」只在此script中有效;能

讓你攜帶資料,反正做就對了

11 of 17

SERVING

5. 發佈 > 部署為網路應用程式

12 of 17

SERVING

13 of 17

THE MAIN COURSE

How to debug?

1.「選取函式」

2. 紅色箭頭處執行

3. console.log (X)

Logger.log (O)

console畫面以� ctrl + Enter叫出

14 of 17

THE MAIN COURSE

range、抓value

getLastColumn()

getLastRow()

getValue()

getValues()

getRow()

getColumn()

...etc.

Ref:

https://developers.google.com/apps-script/reference/spreadsheet/range

Sheet操作

getSheetName()

getSheetId()

appendRow(rowContents)

deleteRow(rowPosition)

protect()

...etc.

Ref:

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet

15 of 17

RECIPE

1.

創建一個試算表,並把欄位設定好

第一列(row)必須是欄位名稱

3.

Setup後,發佈你的Google AppScript應用程式,並取得網址,即該試算表的API。

4.

創建一個html表單,

Ajaxget, post你的試算表

簡易資料庫完成!

16 of 17

AJAX GET/POST

$.ajax({

url: api_url,

type: 'POST/GET’,

dataType: 'json',

data: json_data,

success: function(){},

fail: function(){},

always: function(){}

});

$.post(

api_url,

post_data,

function(){}

,‘json’);

標準型,可handle各種狀況

精簡型,只handle成功(success

$.get(

api_url,

query_obj,

function(){}

,‘json’);

17 of 17

AJAX WHEN

一次handle多個ajax

等到各ajax都完成才繼續動作

$.when($.get(xxxx), $.get(xxx), $.post(xxx))

.done(function(response1, response2, response3) {

/* your statement */

});