web basics 2013-01-10

Post on 20-Aug-2015

267 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Webセミナー

基本

基本

フロントエンド コミュニケーション バックエンド

HTMLCSS

JavaScriptjQueryJSON

HTTP

On Web Connection

4Dタグ

WEB SEND FILE

基本

フロントエンド バックエンド

HTMLCSS

JavaScriptjQueryJSON

On Web Connection

4Dタグ

WEB SEND FILE

基本

フロントエンド バックエンド

基本

フロントエンド バックエンド

基本

フロントエンド バックエンド

基本

Webクライアント コミュニケーション Webサーバー

基本

Webクライアント コミュニケーション Webサーバー

http://192.168.1.114:8080/hello.html

リクエスト

基本

Webクライアント コミュニケーション Webサーバー

http://192.168.1.114:8080/hello.html

レスポンス

リクエスト

基本

http://192.168.1.114:8080/hello.html

リクエスト

基本

http://192.168.1.114:8080/hello.html

リクエスト

基本

http://192.168.1.114:8080/hello.html

リクエスト

プロトコル

基本

http://192.168.1.114:8080/hello.html

リクエスト

プロトコル

ホスト

基本

http://192.168.1.114:8080/hello.html

リクエスト

プロトコル

ホスト

ポート

基本

http://192.168.1.114:8080/hello.html

リクエスト

プロトコル

ホスト

ポート

リクエスト

基本

Webクライアント コミュニケーション Webサーバー

http://192.168.1.114:8080/hello.html

レスポンス

リクエスト

基本

レスポンス

基本

レスポンス

基本

レスポンス

基本

レスポンス

基本

フロントエンド バックエンド

基本

バックエンド

基本

バックエンドスタティック(静)

基本

バックエンド

• 静的なコンテンツ

スタティック(静)

基本

バックエンド

• 静的なコンテンツ

• HTML

スタティック(静)

基本

バックエンド

• 静的なコンテンツ

• HTML

• 画像

スタティック(静)

基本

バックエンド

• 静的なコンテンツ

• HTML

• 画像

• リクエスト処理前に出力済

スタティック(静)

基本

バックエンド

• 静的なコンテンツ

• HTML

• 画像

• リクエスト処理前に出力済

スタティック(静)

基本

• 静的なコンテンツ

• HTML

• 画像

• リクエスト処理前に出力済

スタティック(静) バックエンド

基本

• 静的なコンテンツ

• HTML

• 画像

• リクエスト処理前に出力済

スタティック(静) バックエンド

基本

• 静的なコンテンツ

• HTML

• 画像

• リクエスト処理前に出力済

スタティック(静) バックエンド

基本

• 静的なコンテンツ

• HTML

• 画像

• リクエスト処理前に出力済

スタティック(静) バックエンド

基本

• 静的なコンテンツ

• HTML

• 画像

• リクエスト処理前に出力済

スタティック(静) バックエンド

基本

• 静的なコンテンツ

• HTML

• 画像

• リクエスト処理前に出力済

スタティック(静) バックエンド

基本

• 静的なコンテンツ

• HTML

• 画像

• リクエスト処理前に出力済

スタティック(静) バックエンド

基本

• 静的なコンテンツ

• HTML

• 画像

• リクエスト処理前に出力済

スタティック(静) バックエンド

WEB START SERVERIf(OK=1) //successEnd if

基本

バックエンド

• 静的なコンテンツ

• HTML

• 画像

• リクエスト処理前に出力済

スタティック(静)

基本

バックエンドダイナミック(動)

基本

• 動的なコンテンツ

バックエンドダイナミック(動)

基本

• 動的なコンテンツ

• HTML

バックエンドダイナミック(動)

基本

• 動的なコンテンツ

• HTML

• 画像

バックエンドダイナミック(動)

基本

• 動的なコンテンツ

• HTML

• 画像

• リクエスト処理時に出力

バックエンドダイナミック(動)

基本

4Dタグ バックエンド

基本

4Dタグ バックエンド

• 4DTEXT

基本

4Dタグ バックエンド

• 4DTEXT• 4DHTML

基本

4Dタグ バックエンド

• 4DTEXT• 4DHTML• 4DSCRIPT

基本

4Dタグ バックエンド

• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE

基本

4Dタグ バックエンド

• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF

基本

4Dタグ バックエンド

• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP

基本

4Dタグ バックエンド

• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<h1>ようこそ<!--#4DTEXT [CONTACTS]FirstName--></h1>

<p>ユーザー名: <!--#4DTEXT vtUserName--></p>

<!--#4DTEXT myArray{7}-->

<!--#4DTEXT Current time-->

<!--#4DTEXT Records in selection([INVOICES])-->件のレコードがみつかりました。

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<h1>ようこそ<!--#4DHTML [CONTACTS]FirstName--></h1>

<p>ユーザー名: <!--#4DHTML vtUserName--></p>

<!--#4DHTML myArray{7}-->

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<h1>ようこそ<!--#4DHTML [CONTACTS]FirstName--></h1>

<p>ユーザー名: <!--#4DHTML vtUserName--></p>

<!--#4DHTML myArray{7}-->

[Contacts]lastName:="<b>MIYAKO</b> Keisuke"

vtUserName:= "<font color=\"red\">MIYAKO</font>"

myArray{7}:="<a href=\"http://www.4d.com\">4D</a>"

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<!--#4DSCRIPT/MethodName/Param-->

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<!--#4DSCRIPT/MethodName/Param-->

/Param

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<!--#4DSCRIPT/MethodName/Param-->

/Param

公開メソッド

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<!--#4DSCRIPT/MethodName/Param-->

/Param

公開メソッド

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<!--#4DINCLUDE header/menu.html-->

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<div><!--4DIF (vNumRecords>0)--> <p><!--4DTEXT vNumRecords-->件みつかりました。</p><!--4DELSE--> <p>何もみつかりませんでした。</p><!--4DENDIF--></div>

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DELSEIF, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<div><!--4DIF (vNumRecords>0)--> <p><!--4DTEXT vNumRecords-->件みつかりました。</p><!--4DELSE--> <p>何もみつかりませんでした。</p><!--4DENDIF--></div>

<div><!--4DIF (Condition1)--> <!--4DINCLUDE menu1.html--><!--4DELSEIF (Condition2)--> <!--4DINCLUDE menu2.html--><!--4DELSEIF (Condition3)--> <!--4DINCLUDE menu3.html--><!--4DELSE--> <!--4DINCLUDE menu.html--><!--4DENDIF--></div>

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<!--4DLOOP (arrCities)--> <p><!--4DTEXT arrCities{arrCities}--></p><!--4DENDLOOP-->

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<!--4DLOOP (arrCities)--> <p><!--4DTEXT arrCities{arrCities}--></p><!--4DENDLOOP-->

<!--4DLOOP [CONTACTS]--> <p><!--4DTEXT [CONTACTS]firstName--></p><!--4DENDLOOP-->

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<!--4DLOOP (arrCities)--> <p><!--4DTEXT arrCities{arrCities}--></p><!--4DENDLOOP-->

<!--4DLOOP [CONTACTS]--> <p><!--4DTEXT [CONTACTS]firstName--></p><!--4DENDLOOP-->

<!--4DLOOP allowAction--> <p><!--4DTEXT actionResult--></p><!--4DENDLOOP-->

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<!--4DINCLUDE header.html--><!--4DBASE folder/--><!--4DINCLUDE subpage1.html--><!--4DINCLUDE subpage2.html--><!--4DINCLUDE subpage3.html--><!--4DBASE sub/--><!--4DINCLUDE subpage4.html--><!--4DINCLUDE subpage5.html--><!--4DINCLUDE subpage6.html--><!--4DBASE WEBFOLDER--><!--4DINCLUDE footer.html-->

基本

4Dタグ• 4DTEXT• 4DHTML• 4DSCRIPT• 4DINCLUDE• 4DIF, 4DELSE, 4DENDIF• 4DLOOP, 4DENDLOOP• 4DBASE

<!--4DINCLUDE header.html--><!--4DBASE folder/--><!--4DINCLUDE subpage1.html--><!--4DINCLUDE subpage2.html--><!--4DINCLUDE subpage3.html--><!--4DBASE sub/--><!--4DINCLUDE subpage4.html--><!--4DINCLUDE subpage5.html--><!--4DINCLUDE subpage6.html--><!--4DBASE WEBFOLDER--><!--4DINCLUDE footer.html-->

Webfolder/header.htmlWebfolder/folder/subpage1.htmlWebfolder/folder/subpage2.htmlWebfolder/folder/subpage3.htmlWebfolder/folder/sub/subpage4.htmlWebfolder/folder/sub/subpage5.htmlWebfolder/folder/sub/subpage6.htmlWebfolder/footer.html

基本

Webクライアント コミュニケーション Webサーバー

基本

Webクライアント コミュニケーション Webサーバー

http://192.168.1.114:8080/hello.html

リクエスト

基本

Webクライアント コミュニケーション Webサーバー

http://192.168.1.114:8080/hello.html

リクエスト

.html

基本

Webクライアント コミュニケーション Webサーバー

http://192.168.1.114:8080/hello.html

リクエスト

.html

基本

Webクライアント コミュニケーション Webサーバー

基本

Webクライアント コミュニケーション Webサーバー

http://192.16

8.1.114:8080

/hello.shtml リクエス

基本

Webクライアント コミュニケーション Webサーバー

http://192.16

8.1.114:8080

/hello.shtml リクエス

ト.shtml

基本

Webクライアント コミュニケーション Webサーバー

レスポンス

ファイル読み込み

4Dタグ処理

http://192.16

8.1.114:8080

/hello.shtml リクエス

ト.shtml

基本

Webクライアント コミュニケーション Webサーバー

基本

Webクライアント コミュニケーション Webサーバー

http://192.16

8.1.114/4DA

CTION/myMe

thod/hello

リクエスト

基本

Webクライアント コミュニケーション Webサーバー

http://192.16

8.1.114/4DA

CTION/myMe

thod/hello

リクエスト

/4DACTION/myMethod/hello

基本

Webクライアント コミュニケーション Webサーバー

メソッド実行

http://192.16

8.1.114/4DA

CTION/myMe

thod/hello

リクエスト

基本

Webクライアント コミュニケーション Webサーバー

メソッド実行

http://192.16

8.1.114/4DA

CTION/myMe

thod/hello

リクエスト

WEB SEND FILE

基本

Webクライアント コミュニケーション Webサーバー

レスポンス

メソッド実行

4Dタグ処理

http://192.16

8.1.114/4DA

CTION/myMe

thod/hello

リクエスト

ファイル読み込み

WEB SEND FILE

基本

Webクライアント コミュニケーション Webサーバー

基本

Webクライアント コミュニケーション Webサーバー

http://192.16

8.1.114/helloリクエスト

基本

Webクライアント コミュニケーション Webサーバー

http://192.16

8.1.114/helloリクエスト

/hello

基本

Webクライアント コミュニケーション Webサーバー

On Web Connection

http://192.16

8.1.114/helloリクエスト

基本

Webクライアント コミュニケーション Webサーバー

On Web Connection

http://192.16

8.1.114/helloリクエスト

WEB SEND FILE

基本

Webクライアント コミュニケーション Webサーバー

レスポンス

On Web Connection

4Dタグ処理

http://192.16

8.1.114/helloリクエスト

ファイル読み込み

WEB SEND FILE

基本

On Web Connection

基本

On Web Connection

基本

On Web Connection

• $1リクエスト

基本

On Web Connection

• $1リクエスト

• $2 HTTPヘッダ+ボディ(一部)

基本

On Web Connection

• $1リクエスト

• $2 HTTPヘッダ+ボディ(一部)

• $3 クライアントIPアドレス

基本

On Web Connection

• $1リクエスト

• $2 HTTPヘッダ+ボディ(一部)

• $3 クライアントIPアドレス

• $4 サーバーIPアドレス

基本

On Web Connection

• $1リクエスト

• $2 HTTPヘッダ+ボディ(一部)

• $3 クライアントIPアドレス

• $4 サーバーIPアドレス

• $5 ユーザー名

基本

On Web Connection

• $1リクエスト

• $2 HTTPヘッダ+ボディ(一部)

• $3 クライアントIPアドレス

• $4 サーバーIPアドレス

• $5 ユーザー名

• $6 パスワード

基本

On Web Connection

• $1リクエスト

• $2 HTTPヘッダ+ボディ(一部)

• $3 クライアントIPアドレス

• $4 サーバーIPアドレス

• $5 ユーザー名

• $6 パスワード

WEB GET VARIABLES

基本

On Web Connection

• $1リクエスト

• $2 HTTPヘッダ+ボディ(一部)

• $3 クライアントIPアドレス

• $4 サーバーIPアドレス

• $5 ユーザー名

• $6 パスワード

WEB GET HTTP HEADER

WEB GET VARIABLES

基本

On Web Connection

• $1リクエスト

• $2 HTTPヘッダ+ボディ(一部)

• $3 クライアントIPアドレス

• $4 サーバーIPアドレス

• $5 ユーザー名

• $6 パスワード

WEB GET HTTP BODY

WEB GET HTTP HEADER

WEB GET VARIABLES

基本

On Web Connection

• $1リクエスト

• $2 HTTPヘッダ+ボディ(一部)

• $3 クライアントIPアドレス

• $4 サーバーIPアドレス

• $5 ユーザー名

• $6 パスワード

WEB GET HTTP BODY

WEB GET HTTP HEADER

WEB GET HTTP BODY PARTS

WEB GET VARIABLES

まとめ

基本

基本

• スタティック(静)

• HTML ページ

• images 画像

• css スタイル

• js スクリプト

基本

• スタティック(静)

• HTML ページ

• images 画像

• css スタイル

• js スクリプト

• ダイナミック(動)

• HTML ページ

• images 画像

• json データ

基本

• スタティック(静)

• HTML ページ

• images 画像

• css スタイル

• js スクリプト

• ダイナミック(動)

• HTML ページ

• images 画像

• json データ

基本

• ダイナミック(動)

• HTML ページ

• images 画像

• json データ

基本

• ダイナミック(動)

• HTML ページ

• images 画像

• json データ

基本

• ダイナミック(動)

• HTML ページ

• images 画像

• json データ

• 4Dタグ

• On Web Connection

• .shtml

• 4DACTION

基本

• ダイナミック(動)

• HTML ページ

• images 画像

• json データ

• 4Dタグ

• On Web Connection

• .shtml

• 4DACTION

基本

• 4Dタグ

• On Web Connection

• .shtml

• 4DACTION

基本

• 4Dタグ

• On Web Connection

• .shtml

• 4DACTION

基本

• 4Dタグ

• On Web Connection

• .shtml

• 4DACTION

•WEB GET VARIABLES

•WEB SEND FILE

•WEB GET HTTP HEADER

•WEB GET HTTP BODY

基本

• 4Dタグ

• On Web Connection

• .shtml

• 4DACTION

•WEB GET VARIABLES

•WEB SEND FILE

•WEB GET HTTP HEADER

•WEB GET HTTP BODY• WEB SEND TEXT

• WEB SEND BLOB

• WEB SEND RAW DATA

• WEB SEND HTTP REDIRECT

jQuery

jQuery

<script src="/js/jquery.js"></script><script> $(function(){! //$(document).ready(function()の短縮形 $.getJSON("/Contacts/data", function(data){! var contactsList = '<ul>';! ! ! ! ! ! $.each(data, function(index, value){! contactsList = contactsList + '<li uid="' + value.contactId + '">'; contactsList = contactsList + value.lastName; contactsList = contactsList + value.firstName + '</li>';! });! contactsList += '</ul>';! ! ! ! ! ! $("#contactList").html(contactsList);! ! ! }) });</script>!

WebFolder/Contacts/index.html

jQuery

<script src="/js/jquery.js"></script><script> $(function(){! //$(document).ready(function()の短縮形 $.getJSON("/Contacts/data", function(data){! var contactsList = '<ul>';! ! ! ! ! ! $.each(data, function(index, value){! contactsList = contactsList + '<li uid="' + value.contactId + '">'; contactsList = contactsList + value.lastName; contactsList = contactsList + value.firstName + '</li>';! });! contactsList += '</ul>';! ! ! ! ! ! $("#contactList").html(contactsList);! ! ! }) });</script>!

WebFolder/Contacts/index.html

jQuery

<script src="/js/jquery.js"></script><script> $(function(){! //$(document).ready(function()の短縮形 $.getJSON("/Contacts/data", function(data){! var contactsList = '<ul>';! ! ! ! ! ! $.each(data, function(index, value){! contactsList = contactsList + '<li uid="' + value.contactId + '">'; contactsList = contactsList + value.lastName; contactsList = contactsList + value.firstName + '</li>';! });! contactsList += '</ul>';! ! ! ! ! ! $("#contactList").html(contactsList);! ! ! }) });</script>!

WebFolder/Contacts/index.html

jQuery

<script src="/js/jquery.js"></script><script> $(function(){! //$(document).ready(function()の短縮形 $.getJSON("/Contacts/data", function(data){! var contactsList = '<ul>';! ! ! ! ! ! $.each(data, function(index, value){! contactsList = contactsList + '<li uid="' + value.contactId + '">'; contactsList = contactsList + value.lastName; contactsList = contactsList + value.firstName + '</li>';! });! contactsList += '</ul>';! ! ! ! ! ! $("#contactList").html(contactsList);! ! ! }) });</script>!

WebFolder/Contacts/index.html

jQuery

On Web Connection

C_TEXT($1;$2;$3;$4;$5;$6)

$request:=$1

Case of : ($request="/Contacts/data")

ALL RECORDS([Contacts]) $filePath:=Get 4D folder(Current Resources folder)+\ "json"+Folder separator+"contacts.html" WEB SEND FILE($filePath)

End case

jQuery

[<!--4DLOOP [Contacts]-->! {! "contactId":"<!--4DTEXT w_escapeText([Contacts]id)-->",! "firstName":"<!--4DTEXT w_escapeText([Contacts]firstName)-->",! "lastName":"<!--4DTEXT w_escapeText([Contacts]lastName)-->",! "email":"<!--4DTEXT w_escapeText([Contacts]email)-->",! "mobilePhone":"<!--4DTEXT w_escapeText([Contacts]mobilePhone)-->"! }<!--4DTEXT w_endOfArrayItem(->[Contacts])--><!--4DENDLOOP-->]

Resources/json/contacts.html

jQuery

[<!--4DLOOP [Contacts]-->! {! "contactId":"<!--4DTEXT w_escapeText([Contacts]id)-->",! "firstName":"<!--4DTEXT w_escapeText([Contacts]firstName)-->",! "lastName":"<!--4DTEXT w_escapeText([Contacts]lastName)-->",! "email":"<!--4DTEXT w_escapeText([Contacts]email)-->",! "mobilePhone":"<!--4DTEXT w_escapeText([Contacts]mobilePhone)-->"! }<!--4DTEXT w_endOfArrayItem(->[Contacts])--><!--4DENDLOOP-->]

Resources/json/contacts.html

jQuery

[<!--4DLOOP [Contacts]-->! {! "contactId":"<!--4DTEXT w_escapeText([Contacts]id)-->",! "firstName":"<!--4DTEXT w_escapeText([Contacts]firstName)-->",! "lastName":"<!--4DTEXT w_escapeText([Contacts]lastName)-->",! "email":"<!--4DTEXT w_escapeText([Contacts]email)-->",! "mobilePhone":"<!--4DTEXT w_escapeText([Contacts]mobilePhone)-->"! }<!--4DTEXT w_endOfArrayItem(->[Contacts])--><!--4DENDLOOP-->]

Resources/json/contacts.html

jQuery

[<!--4DLOOP [Contacts]-->! {! "contactId":"<!--4DTEXT w_escapeText([Contacts]id)-->",! "firstName":"<!--4DTEXT w_escapeText([Contacts]firstName)-->",! "lastName":"<!--4DTEXT w_escapeText([Contacts]lastName)-->",! "email":"<!--4DTEXT w_escapeText([Contacts]email)-->",! "mobilePhone":"<!--4DTEXT w_escapeText([Contacts]mobilePhone)-->"! }<!--4DTEXT w_endOfArrayItem(->[Contacts])--><!--4DENDLOOP-->]

Resources/json/contacts.html

jQuery

[<!--4DLOOP [Contacts]-->! {! "contactId":"<!--4DTEXT w_escapeText([Contacts]id)-->",! "firstName":"<!--4DTEXT w_escapeText([Contacts]firstName)-->",! "lastName":"<!--4DTEXT w_escapeText([Contacts]lastName)-->",! "email":"<!--4DTEXT w_escapeText([Contacts]email)-->",! "mobilePhone":"<!--4DTEXT w_escapeText([Contacts]mobilePhone)-->"! }<!--4DTEXT w_endOfArrayItem(->[Contacts])--><!--4DENDLOOP-->]

Resources/json/contacts.html

C_TEXT($1;$0)

If (Count parameters>0)

$0:=$1

If (Length($0)#0) $0:=Replace string($0;"\\";"\\\\";*) $0:=Replace string($0;"\"";"\\\"";*) $0:=Replace string($0;"/";"\\/";*) $0:=Replace string($0;Char(Backspace);"\\b";*) $0:=Replace string($0;Char(FF ASCII code);"\\f";*) $0:=Replace string($0;"\n";"\\n";*) $0:=Replace string($0;"\r";"\\r";*) $0:=Replace string($0;"\t";"\\t";*) End if End if

w_escapeText

jQuery

C_TEXT($1;$0)

If (Count parameters>0)

$0:=$1

If (Length($0)#0) $0:=Replace string($0;"\\";"\\\\";*) $0:=Replace string($0;"\"";"\\\"";*) $0:=Replace string($0;"/";"\\/";*) $0:=Replace string($0;Char(Backspace);"\\b";*) $0:=Replace string($0;Char(FF ASCII code);"\\f";*) $0:=Replace string($0;"\n";"\\n";*) $0:=Replace string($0;"\r";"\\r";*) $0:=Replace string($0;"\t";"\\t";*) End if End if

w_escapeText

jQuery

C_TEXT($1;$0)

If (Count parameters>0)

$0:=$1

If (Length($0)#0) $0:=Replace string($0;"\\";"\\\\";*) $0:=Replace string($0;"\"";"\\\"";*) $0:=Replace string($0;"/";"\\/";*) $0:=Replace string($0;Char(Backspace);"\\b";*) $0:=Replace string($0;Char(FF ASCII code);"\\f";*) $0:=Replace string($0;"\n";"\\n";*) $0:=Replace string($0;"\r";"\\r";*) $0:=Replace string($0;"\t";"\\t";*) End if End if

w_escapeText

jQuery

C_TEXT($1;$0)

If (Count parameters>0)

$0:=$1

If (Length($0)#0) $0:=Replace string($0;"\\";"\\\\";*) $0:=Replace string($0;"\"";"\\\"";*) $0:=Replace string($0;"/";"\\/";*) $0:=Replace string($0;Char(Backspace);"\\b";*) $0:=Replace string($0;Char(FF ASCII code);"\\f";*) $0:=Replace string($0;"\n";"\\n";*) $0:=Replace string($0;"\r";"\\r";*) $0:=Replace string($0;"\t";"\\t";*) End if End if

w_escapeText

jQuery

jQuery

[<!--4DLOOP [Contacts]-->! {! "contactId":"<!--4DTEXT w_escapeText([Contacts]id)-->",! "firstName":"<!--4DTEXT w_escapeText([Contacts]firstName)-->",! "lastName":"<!--4DTEXT w_escapeText([Contacts]lastName)-->",! "email":"<!--4DTEXT w_escapeText([Contacts]email)-->",! "mobilePhone":"<!--4DTEXT w_escapeText([Contacts]mobilePhone)-->"! }<!--4DTEXT w_endOfArrayItem(->[Contacts])--><!--4DENDLOOP-->]

Resources/json/contacts.html

jQuery

[<!--4DLOOP [Contacts]-->! {! "contactId":"<!--4DTEXT w_escapeText([Contacts]id)-->",! "firstName":"<!--4DTEXT w_escapeText([Contacts]firstName)-->",! "lastName":"<!--4DTEXT w_escapeText([Contacts]lastName)-->",! "email":"<!--4DTEXT w_escapeText([Contacts]email)-->",! "mobilePhone":"<!--4DTEXT w_escapeText([Contacts]mobilePhone)-->"! }<!--4DTEXT w_endOfArrayItem(->[Contacts])--><!--4DENDLOOP-->]

Resources/json/contacts.html

C_POINTER($1)C_TEXT($0)

If (Count parameters>0) If (Not(Nil($1))) If (Table(Table($1))=$1) If (Records in selection($1->)#Selected record number($1->)) $0:="," End if End if End if End if

w_endOfArrayItem

jQuery

C_POINTER($1)C_TEXT($0)

If (Count parameters>0) If (Not(Nil($1))) If (Table(Table($1))=$1) If (Records in selection($1->)#Selected record number($1->)) $0:="," End if End if End if End if

w_endOfArrayItem

jQuery

C_POINTER($1)C_TEXT($0)

If (Count parameters>0) If (Not(Nil($1))) If (Table(Table($1))=$1) If (Records in selection($1->)#Selected record number($1->)) $0:="," End if End if End if End if

w_endOfArrayItem

jQuery

C_POINTER($1)C_TEXT($0)

If (Count parameters>0) If (Not(Nil($1))) If (Table(Table($1))=$1) If (Records in selection($1->)#Selected record number($1->)) $0:="," End if End if End if End if

w_endOfArrayItem

jQuery

C_POINTER($1)C_TEXT($0)

If (Count parameters>0) If (Not(Nil($1))) If (Table(Table($1))=$1) If (Records in selection($1->)#Selected record number($1->)) $0:="," End if End if End if End if

w_endOfArrayItem

jQuery

jQuery

<script src="/js/jquery.js"></script><script> $(function(){! //$(document).ready(function()の短縮形 $.getJSON("/Contacts/data", function(data){! var contactsList = '<ul>';! ! ! ! ! ! $.each(data, function(index, value){! contactsList = contactsList + '<li uid="' + value.contactId + '">'; contactsList = contactsList + value.lastName; contactsList = contactsList + value.firstName + '</li>';! });! contactsList += '</ul>';! ! ! ! ! ! $("#contactList").html(contactsList);! ! ! }) });</script>!

WebFolder/Contacts/index.html

デバッグ

デバッグ

フロントエンド バックエンド

デバッグ

フロントエンド バックエンド

デバッグ

フロントエンド バックエンド

TRACE

デバッグ

フロントエンド バックエンド

TRACE

デバッグ

フロントエンド バックエンド

デバッグ

フロントエンド バックエンド

F12(開発者ツール)

デバッグ

フロントエンド バックエンド

F12(開発者ツール)

デバッグ

フロントエンド バックエンド

デバッグ

フロントエンド バックエンド

⌥⌘I(デベロッパーツール)

デバッグ

フロントエンド バックエンド

⌥⌘I(デベロッパーツール)

デバッグ

フロントエンド バックエンド

デバッグ

フロントエンド バックエンド

F12(Firebug)

デバッグ

フロントエンド バックエンド

F12(Firebug)

デバッグ

フロントエンド バックエンド

デバッグ

フロントエンド バックエンド

⌥⌘I(Webインスペクタ)

デバッグ

フロントエンド バックエンド

⌥⌘I(Webインスペクタ)

デバッグ

デバッグ

デバッグ

デバッグ

デバッグ

デバッグ

デバッグ

デバッグ

モバイル

C_BOOLEAN($0;$isMobile)

ARRAY TEXT($headerNames;0)ARRAY TEXT($headerValues;0)

WEB GET HTTP HEADER($headerNames;$headerValues)C_LONGINT($i)

$i:=Find in array($headerNames;"User-Agent")

If ($i#-1)

$userAgent:=$headerValues{$i}

$isMobile:=True Case of : (Position("iPhone";$userAgent)#0) : (Position("iPad";$userAgent)#0) : (Position("Android";$userAgent)#0) Else $isMobile:=False End case

End if

$0:=$isMobilew_isMobile

モバイル

C_BOOLEAN($0;$isMobile)

ARRAY TEXT($headerNames;0)ARRAY TEXT($headerValues;0)

WEB GET HTTP HEADER($headerNames;$headerValues)C_LONGINT($i)

$i:=Find in array($headerNames;"User-Agent")

If ($i#-1)

$userAgent:=$headerValues{$i}

$isMobile:=True Case of : (Position("iPhone";$userAgent)#0) : (Position("iPad";$userAgent)#0) : (Position("Android";$userAgent)#0) Else $isMobile:=False End case

End if

$0:=$isMobilew_isMobile

モバイル

モバイル

C_TEXT($1)

ARRAY LONGINT($pos;0)ARRAY LONGINT($len;0)

If (Match regex("((.+)\\.(.+))";$1;1;$pos;$len))

$fileName:=Substring($1;$pos{2};$len{2}) $fileType:=Substring($1;$pos{3};$len{3})

$filePath:=Get 4D folder(Current Resources folder)+\ $fileType+Folder separator+$fileName+".html"

WEB SEND FILE($filePath)

End if

モバイル

w_sendFile

モバイル

On Web Connection

C_TEXT($1;$2;$3;$4;$5;$6)

$request:=$1

$isMobile:=w_isMobile

Case of : ($request="/Contacts/")

ALL RECORDS([Contacts])

If ($isMobile) w_sendFile ("contacts-mobile.html") Else w_sendFile ("contacts-desktop.html") End if

End case

モバイル

モバイル

jQuery Mobile

jQuery Mobile

jQuery Mobile

jQuery Mobile

<head>! <meta charset="utf-8" />! <meta name="viewport" content="width=device-width, initial-scale=1">! <title>Contacts</title>! <!--jQuery Mobile関連のスタイルシートです。-->! !! <link rel="stylesheet" href="/css/jquery.mobile-1.2.0.min.css" />! <link rel="stylesheet" href="/css/jquery.mobile.theme-1.2.0.min.css" />! <link rel="stylesheet" href="/css/jquery.mobile.structure-1.2.0.min.css" />! <!--はじめにjQuery本体を読み込みます。-->! !! <script src="/js/jquery-1.8.2.min.js"></script>! <!--つづけてjQuery Mobileを読み込みます。-->!! ! !! <script src="/js/jquery.mobile-1.2.0.min.js"></script></head>

Resources/html/contacts-mobile.html

jQuery Mobile

<head>! <meta charset="utf-8" />! <meta name="viewport" content="width=device-width, initial-scale=1">! <title>Contacts</title>! <!--jQuery Mobile関連のスタイルシートです。-->! !! <link rel="stylesheet" href="/css/jquery.mobile-1.2.0.min.css" />! <link rel="stylesheet" href="/css/jquery.mobile.theme-1.2.0.min.css" />! <link rel="stylesheet" href="/css/jquery.mobile.structure-1.2.0.min.css" />! <!--はじめにjQuery本体を読み込みます。-->! !! <script src="/js/jquery-1.8.2.min.js"></script>! <!--つづけてjQuery Mobileを読み込みます。-->!! ! !! <script src="/js/jquery.mobile-1.2.0.min.js"></script></head>

Resources/html/contacts-mobile.html

jQuery Mobile

<head>! <meta charset="utf-8" />! <meta name="viewport" content="width=device-width, initial-scale=1">! <title>Contacts</title>! <!--jQuery Mobile関連のスタイルシートです。-->! !! <link rel="stylesheet" href="/css/jquery.mobile-1.2.0.min.css" />! <link rel="stylesheet" href="/css/jquery.mobile.theme-1.2.0.min.css" />! <link rel="stylesheet" href="/css/jquery.mobile.structure-1.2.0.min.css" />! <!--はじめにjQuery本体を読み込みます。-->! !! <script src="/js/jquery-1.8.2.min.js"></script>! <!--つづけてjQuery Mobileを読み込みます。-->!! ! !! <script src="/js/jquery.mobile-1.2.0.min.js"></script></head>

Resources/html/contacts-mobile.html

jQuery Mobile

jQuery Mobile

jQuery Mobile

JSON

JSONhttp://ja.wikipedia.org/JSON

JSONhttp://ja.wikipedia.org/JSON

• JavaScriptオブジェクトの表記法を応用したデータ形式

JSONhttp://ja.wikipedia.org/JSON

• JavaScriptオブジェクトの表記法を応用したデータ形式

• JSON = JavaScript Object Notation

JSONhttp://ja.wikipedia.org/JSON

• JavaScriptオブジェクトの表記法を応用したデータ形式

• JSON = JavaScript Object Notation

• JSON # JavaScript

JSONhttp://ja.wikipedia.org/JSON

• JavaScriptオブジェクトの表記法を応用したデータ形式

• JSON = JavaScript Object Notation

• JSON # JavaScript

Inspired

JSONhttp://ja.wikipedia.org/JSON

• JavaScriptオブジェクトの表記法を応用したデータ形式

• JSON = JavaScript Object Notation

• JSON # JavaScript

『JSONは余計な脂肪を除いたXMLの代役』

ダグラス・クロックフォード http://www.json.org/fatfree.html

Inspired

JSONデータの例

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

JSONデータの例

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

配列

JSONデータの例

文字列

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

配列

JSONデータの例

文字列 数値

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

配列

JSONデータの例

文字列

ブール

数値

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

配列

JSONの特徴

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

JSONの特徴JSON特性 メリット

軽量フォーマット HTTP経由に最適

汎用性の高いデータ型と構造 プログラミング言語に依存しない

標準テキスト 人間が理解

簡潔 (それでも豊かな表現力) 容易に解析

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

JSONの特徴JSON特性 メリット

軽量フォーマット HTTP経由に最適

汎用性の高いデータ型と構造 プログラミング言語に依存しない

標準テキスト 人間が理解

簡潔 (それでも豊かな表現力) 容易に解析

1

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

JSONの特徴JSON特性 メリット

軽量フォーマット HTTP経由に最適

汎用性の高いデータ型と構造 プログラミング言語に依存しない

標準テキスト 人間が理解

簡潔 (それでも豊かな表現力) 容易に解析

2

1

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

JSONの特徴JSON特性 メリット

軽量フォーマット HTTP経由に最適

汎用性の高いデータ型と構造 プログラミング言語に依存しない

標準テキスト 人間が理解

簡潔 (それでも豊かな表現力) 容易に解析

2

3

1

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

JSONの特徴JSON特性 メリット

軽量フォーマット HTTP経由に最適

汎用性の高いデータ型と構造 プログラミング言語に依存しない

標準テキスト 人間が理解

簡潔 (それでも豊かな表現力) 容易に解析

2

3

4

1

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

クライアント サーバー

JSON転送の流れ

http://server.com/q?lastName=keisuke

1

HTTPリクエスト

クライアント サーバー

JSON転送の流れ

http://server.com/q?lastName=keisuke

1

2

HTTPリクエスト

クエリの実行JSONの組み立て

クライアント サーバー

JSON転送の流れ

http://server.com/q?lastName=keisuke

1

2

3

HTTPリクエスト

クエリの実行JSONの組み立て

HTTPレスポンス

クライアント サーバー

JSON転送の流れ

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

http://server.com/q?lastName=keisuke

1

2

3

4

HTTPリクエスト

クエリの実行JSONの組み立て

JSONデータを解析

HTTPレスポンス

クライアント サーバー

JSON転送の流れ

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

JSONデータ型と4D

JSONデータ型と4DJSON型 構造体 値 4D型

object ✔

array ✔ 配列

string ✔ テキスト

number ✔ 実数/整数

true/false ✔ ブール

null ✔

JSONデータ型と4DJSON型 構造体 値 4D型

object ✔

array ✔ 配列

string ✔ テキスト

number ✔ 実数/整数

true/false ✔ ブール

null ✔

JSONデータ型と4DJSON型 構造体 値 4D型

object ✔

array ✔ 配列

string ✔ テキスト

number ✔ 実数/整数

true/false ✔ ブール

null ✔

JSONデータ型と4DJSON型 構造体 値 4D型

object ✔

array ✔ 配列

string ✔ テキスト

number ✔ 実数/整数

true/false ✔ ブール

null ✔

JSONデータ型と4DJSON型 構造体 値 4D型

object ✔

array ✔ 配列

string ✔ テキスト

number ✔ 実数/整数

true/false ✔ ブール

null ✔

JSONデータ型と4DJSON型 構造体 値 4D型

object ✔

array ✔ 配列

string ✔ テキスト

number ✔ 実数/整数

true/false ✔ ブール

null ✔

JSONデータ型と4DJSON型 構造体 値 4D型

object ✔

array ✔ 配列

string ✔ テキスト

number ✔ 実数/整数

true/false ✔ ブール

null ✔

JSONデータ型と4DJSON型 構造体 値 4D型

object ✔

array ✔ 配列

JSONデータ型と4DJSON型 構造体 値 4D型

object ✔

array ✔ 配列

値は構造体の中にだけ存在する

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

JSON配列の例

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

myArray

JSON配列の例

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

myArray

配列インデックス 値myArray[0] ➤ “Miyako”myArray[1] ➤ “Keisuke”myArray[2] ➤ “95015”myArray[3] ➤ 38myArray[4] ➤ true

JSON配列の例

[ “Miyako”, “Keisuke”, “95015”, 38, true ]

JSON配列の例

配列インデックス 値myArray{1} ➤ “Miyako”myArray{2} ➤ “Keisuke”myArray{3} ➤ “95015”myArray{4} ➤ “38”myArray{5} ➤ “true”

myArray

JSONオブジェクトの例

{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “city” : “Tokyo”, “state” : “JP”, “zip” : “95015”, “age” : 38, “male” : true}

JSONオブジェクトの例

オブジェクト

{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “city” : “Tokyo”, “state” : “JP”, “zip” : “95015”, “age” : 38, “male” : true}

JSONオブジェクトの例

キー

オブジェクト

{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “city” : “Tokyo”, “state” : “JP”, “zip” : “95015”, “age” : 38, “male” : true}

JSONオブジェクトの例

値キー

オブジェクト

{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “city” : “Tokyo”, “state” : “JP”, “zip” : “95015”, “age” : 38, “male” : true}

JSONオブジェクトの例

値キー

オブジェクト

{ “male” : true, “city” : “Tokyo”, “lastName” : “Miyako”, “age” : 38, “zip” : “95015”, “firstName” : “Keisuke”, “state” : “JP”}

{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “city” : “Tokyo”, “state” : “JP”, “zip” : “95015”, “age” : 38, “male” : true}

JSONオブジェクトの例

値キー

順不問

オブジェクト

{ “male” : true, “city” : “Tokyo”, “lastName” : “Miyako”, “age” : 38, “zip” : “95015”, “firstName” : “Keisuke”, “state” : “JP”}

{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “city” : “Tokyo”, “state” : “JP”, “zip” : “95015”, “age” : 38, “male” : true}

JSONオブジェクトの例

値キー

オブジェクトはキー/値ペア(連想配列)順不問

オブジェクト

{ “male” : true, “city” : “Tokyo”, “lastName” : “Miyako”, “age” : 38, “zip” : “95015”, “firstName” : “Keisuke”, “state” : “JP”}

{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “city” : “Tokyo”, “state” : “JP”, “zip” : “95015”, “age” : 38, “male” : true}

オブジェクト表記{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “city” : “Tokyo”, “state” : “JP”, “zip” : “95015”, “age” : 38, “male” : true}

オブジェクト表記{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “city” : “Tokyo”, “state” : “JP”, “zip” : “95015”, “age” : 38, “male” : true}

myObject

オブジェクト表記

キー 値 myObject.firstName ➤ “Keisuke” myObject.lastName ➤ “Miyako” myObject.zip ➤ “95015” myObject.age ➤ 38

{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “city” : “Tokyo”, “state” : “JP”, “zip” : “95015”, “age” : 38, “male” : true}

myObject

NestedObject

構造体は値

{ “cell” : “734-555-1234”, “work” : “734-555-2468”, “home” : “734-555-1357”}

NestedObject

構造体は値

{ “cell” : “734-555-1234”, “work” : “734-555-2468”, “home” : “734-555-1357”}

phone

NestedObject

構造体は値

キー 値phone.cell ➤ “734-555-1234”

phone.work ➤ “734-555-2468”

phone.home ➤ “734-555-1357”

{ “cell” : “734-555-1234”, “work” : “734-555-2468”, “home” : “734-555-1357”}

phone

NestedObject

構造体は値

{ “cell” : “734-555-1234”, “work” : “734-555-2468”, “home” : “734-555-1357”}

phone

NestedObject

構造体は値

{ “cell” : “734-555-1234”, “work” : “734-555-2468”, “home” : “734-555-1357”}

{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “phone” :

}phone

NestedObject

構造体は値

{ “cell” : “734-555-1234”, “work” : “734-555-2468”, “home” : “734-555-1357”}

{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “phone” :

}

contact

phone

NestedObject

構造体は値

キー 値 contact.phone.cell ➤ “734-555-1234”

contact.phone.work ➤ “734-555-2468”

contact.phone.home ➤ “734-555-1357”

{ “cell” : “734-555-1234”, “work” : “734-555-2468”, “home” : “734-555-1357”}

{ “firstName” : “Keisuke”, “lastName” : “Miyako”, “phone” :

}

contact

phone

構造体のネストネストできるものネストできるものネストできるもの

オブジェクト配列

構造体のネストネストできるものネストできるものネストできるもの

オブジェクト配列

オブジェクト 配列 値✔ ✔ ✔

✔ ✔ ✔

構造体のネストネストできるものネストできるものネストできるもの

オブジェクト配列

オブジェクト 配列 値✔ ✔ ✔

✔ ✔ ✔

構造体のネストネストできるものネストできるものネストできるもの

オブジェクト配列

オブジェクト 配列 値✔ ✔ ✔

✔ ✔ ✔

構造体のネスト

•ネストされた構造体は階層構造を形成する

ネストできるものネストできるものネストできるもの

オブジェクト配列

オブジェクト 配列 値✔ ✔ ✔

✔ ✔ ✔

構造体のネスト

•ネストされた構造体は階層構造を形成する•階層数に制限はない

ネストできるものネストできるものネストできるもの

オブジェクト配列

オブジェクト 配列 値✔ ✔ ✔

✔ ✔ ✔

配列のネスト

[

[ 4, “Cape”, 699.00 ], [ 6, “Cowl”, 1195.00 ], [ 3, “Boots”, 395.00 ], [ 1, “Batwing”, 697199.00 ]

]

配列のネストlineItem

[

[ 4, “Cape”, 699.00 ], [ 6, “Cowl”, 1195.00 ], [ 3, “Boots”, 395.00 ], [ 1, “Batwing”, 697199.00 ]

]

配列のネストlineItem

lineItem[1][

[ 4, “Cape”, 699.00 ], [ 6, “Cowl”, 1195.00 ], [ 3, “Boots”, 395.00 ], [ 1, “Batwing”, 697199.00 ]

]

配列のネストlineItem

lineItem[1][

[ 4, “Cape”, 699.00 ], [ 6, “Cowl”, 1195.00 ], [ 3, “Boots”, 395.00 ], [ 1, “Batwing”, 697199.00 ]

]lineItem[1][2]

オブジェクトのネスト

{ “number” : “37584”, “customerID” : “1690”, “customerName” : “Bruce Wayne”, “subtotal” : 708350.00, “salesTax” : 63751.50, “total” : 772101.50, “lineItem” : [ {“qty”:4, “desc”:”Cape”, “price”:699.00}, {“qty”:6, “desc”:”Cowl”, “price”:1195.00}, {“qty”:3, “desc”:”Boots”, “price”:395.00}, {“qty”:1, “desc”:”Batwing”, “price”:697199.00} ]}

オブジェクトのネスト

{ “number” : “37584”, “customerID” : “1690”, “customerName” : “Bruce Wayne”, “subtotal” : 708350.00, “salesTax” : 63751.50, “total” : 772101.50, “lineItem” : [ {“qty”:4, “desc”:”Cape”, “price”:699.00}, {“qty”:6, “desc”:”Cowl”, “price”:1195.00}, {“qty”:3, “desc”:”Boots”, “price”:395.00}, {“qty”:1, “desc”:”Batwing”, “price”:697199.00} ]}

オブジェクトのネストinvoice

{ “number” : “37584”, “customerID” : “1690”, “customerName” : “Bruce Wayne”, “subtotal” : 708350.00, “salesTax” : 63751.50, “total” : 772101.50, “lineItem” : [ {“qty”:4, “desc”:”Cape”, “price”:699.00}, {“qty”:6, “desc”:”Cowl”, “price”:1195.00}, {“qty”:3, “desc”:”Boots”, “price”:395.00}, {“qty”:1, “desc”:”Batwing”, “price”:697199.00} ]}

オブジェクトのネスト

{ “number” : “37584”, “customerID” : “1690”, “customerName” : “Bruce Wayne”, “subtotal” : 708350.00, “salesTax” : 63751.50, “total” : 772101.50, “lineItem” : [ {“qty”:4, “desc”:”Cape”, “price”:699.00}, {“qty”:6, “desc”:”Cowl”, “price”:1195.00}, {“qty”:3, “desc”:”Boots”, “price”:395.00}, {“qty”:1, “desc”:”Batwing”, “price”:697199.00} ]}

invoice.lineItem

invoice

オブジェクトのネスト

{ “number” : “37584”, “customerID” : “1690”, “customerName” : “Bruce Wayne”, “subtotal” : 708350.00, “salesTax” : 63751.50, “total” : 772101.50, “lineItem” : [ {“qty”:4, “desc”:”Cape”, “price”:699.00}, {“qty”:6, “desc”:”Cowl”, “price”:1195.00}, {“qty”:3, “desc”:”Boots”, “price”:395.00}, {“qty”:1, “desc”:”Batwing”, “price”:697199.00} ]}

invoice

invoice.lineItem[1]

invoice.lineItem

オブジェクトのネスト

{ “number” : “37584”, “customerID” : “1690”, “customerName” : “Bruce Wayne”, “subtotal” : 708350.00, “salesTax” : 63751.50, “total” : 772101.50, “lineItem” : [ {“qty”:4, “desc”:”Cape”, “price”:699.00}, {“qty”:6, “desc”:”Cowl”, “price”:1195.00}, {“qty”:3, “desc”:”Boots”, “price”:395.00}, {“qty”:1, “desc”:”Batwing”, “price”:697199.00} ]}

invoice

invoice.lineItem[1]

invoice.lineItem[1].descinvoice.lineItem

function selectContact(ContactId){! $.getJSON('data', 'id='+ContactId, function(data){! ! ! $("#contactId").val(data.contactId);! $("#firstName").val(data.firstName);! $("#lastName").val(data.lastName);! $("#email").val(data.email);! $("#mobilePhone").val(data.mobilePhone);! ! ! })! return true;}

JSON

WebFolder/js/contact-mobile.js

function selectContact(ContactId){! $.getJSON('data', 'id='+ContactId, function(data){! ! ! $("#contactId").val(data.contactId);! $("#firstName").val(data.firstName);! $("#lastName").val(data.lastName);! $("#email").val(data.email);! $("#mobilePhone").val(data.mobilePhone);! ! ! })! return true;}

JSON

WebFolder/js/contact-mobile.js

C_TEXT($1;$2;$3;$4;$5;$6)

$request:=$1

Case of : ($request="/Contacts/data?id=@")

ARRAY TEXT($names;0) ARRAY TEXT($values;0) WEB GET VARIABLES($names;$values)

$i:=Find in array($names;"id")

If ($i#-1) QUERY([Contacts];[Contacts]id=$values{$i}) w_sendFile ("contact.json") End if

End case

JSON

On Web Connection

C_TEXT($1;$2;$3;$4;$5;$6)

$request:=$1

Case of : ($request="/Contacts/data?id=@")

ARRAY TEXT($names;0) ARRAY TEXT($values;0) WEB GET VARIABLES($names;$values)

$i:=Find in array($names;"id")

If ($i#-1) QUERY([Contacts];[Contacts]id=$values{$i}) w_sendFile ("contact.json") End if

End case

JSON

On Web Connection

{! "contactId":"<!--4DTEXT w_escapeText([Contacts]id)-->",! "firstName":"<!--4DTEXT w_escapeText([Contacts]firstName)-->",! "lastName":"<!--4DTEXT w_escapeText([Contacts]lastName)-->",! "email":"<!--4DTEXT w_escapeText([Contacts]email)-->",! "mobilePhone":"<!--4DTEXT w_escapeText([Contacts]mobilePhone)-->"}

JSON

Resources/json/contact.html

function saveContact(){! $.post('data/update', $("#contactForm").serialize(), function(data){! ! loadContacts();! ! })}

JSON

WebFolder/js/contact-mobile.js

function saveContact(){! $.post('data/update', $("#contactForm").serialize(), function(data){! ! loadContacts();! ! })}

JSON

WebFolder/js/contact-mobile.js

C_BOOLEAN($0;$isPost)

ARRAY TEXT($headerNames;0)ARRAY TEXT($headerValues;0)WEB GET HTTP HEADER($headerNames;$headerValues)

C_LONGINT($i)

$i:=Find in array($headerNames;"X-METHOD")$isPost:=False

If ($i#-1) $isPost:=($headerValues{$i}="POST") $i:=Find in array($headerNames;"X-METHOD-OVERRIDE") If ($i#-1) $isPost:=False End if End if

$0:=$isPost

まとめ

w_isPost

C_BOOLEAN($0;$isPost)

ARRAY TEXT($headerNames;0)ARRAY TEXT($headerValues;0)WEB GET HTTP HEADER($headerNames;$headerValues)

C_LONGINT($i)

$i:=Find in array($headerNames;"X-METHOD")$isPost:=False

If ($i#-1) $isPost:=($headerValues{$i}="POST") $i:=Find in array($headerNames;"X-METHOD-OVERRIDE") If ($i#-1) $isPost:=False End if End if

$0:=$isPost

まとめ

w_isPost

C_BOOLEAN($0;$isPost)

ARRAY TEXT($headerNames;0)ARRAY TEXT($headerValues;0)WEB GET HTTP HEADER($headerNames;$headerValues)

C_LONGINT($i)

$i:=Find in array($headerNames;"X-METHOD")$isPost:=False

If ($i#-1) $isPost:=($headerValues{$i}="POST") $i:=Find in array($headerNames;"X-METHOD-OVERRIDE") If ($i#-1) $isPost:=False End if End if

$0:=$isPost

まとめ

w_isPost

C_TEXT($1;$2;$3;$4;$5;$6)

$request:=$1

Case of : ($request="/Contacts/")

Contacts_Send_page

: ($request="/Contacts/data")

Contacts_Send_all

: ($request="/Contacts/data?id=@")

Contacts_Send_1

: ($request="/Contacts/data/update")

Contacts_Update

End case

まとめ

On Web Connection

C_DATE($1;$date)C_TIME($2;$time)C_TEXT($0)

If (Count parameters>0) $date:=$1 If (Count parameters>1) $time:=$2 Else $time:=Current time End if Else $date:=Current date $time:=Current timeEnd if

$0:=String($date;ISO Date GMT;$time)

w_escapeDate

データオブジェクトの作成

C_DATE($1;$date)C_TIME($2;$time)C_TEXT($0)

If (Count parameters>0) $date:=$1 If (Count parameters>1) $time:=$2 Else $time:=Current time End if Else $date:=Current date $time:=Current timeEnd if

$0:=String($date;ISO Date GMT;$time)

w_escapeDate

データオブジェクトの作成

Webセミナー

top related