Ajaxで今よみがえる(^^;;-->[クロスブラウザ技術 ]DHTMLサンプル集
古籏一浩さんとのはじめての共著 発売中-->『Ajax実践テクニック』 古籏一浩/高橋 登史朗 (著)秀和システム
配本予約開始-->『入門Ajax 増補改訂版 』 高橋 登史朗 (著)ソフトバンククリエイティブ ; ISBN: 4797336242
【カテゴリー】 ActionScript ( 4 ) AjaSQL ( 9 ) Ajax ( 541 ) Arax ( 1 ) canvas ( 9 ) CSS ( 8 ) DLNA ( 1 ) Dojo ( 16 ) DOM ( 44 ) ES4 ( 3 ) 反重力物質 ( 1 ) ffAdd-on ( 1 ) Flash ( 45 ) Flash Remoting ( 11 ) FTP ( 2 ) GAF ( 9 ) Google Maps ( 106 ) GPS ( 38 ) HTTPヘッダサンプル ( 9 ) IPv6 ( 1 ) 漫画 ( 1 ) Java ( 44 ) JavaScript ( 232 ) jKamo ( 8 ) jQuery ( 66 ) jquery-ref ( 1 ) jsGadget ( 19 ) jslb_ ( 3 ) jslb_ajax ( 9 ) JSON ( 44 ) JSR223 ( 7 ) kjscmd ( 1 ) KNOPPIX ( 1 ) Linux ( 14 ) Mac ( 8 ) Memo ( 3 ) Microformats ( 2 ) Mini AJAX ( 2 ) MochiKit ( 2 ) mootools ( 2 ) Movable Type ( 57 ) MySQL ( 9 ) NewGameWeb ( 2 ) Nucleus ( 8 ) OpenAJAX ( 3 ) OpenDocument ( 1 ) OS ( 5 ) P2P ( 2 ) Perl ( 7 ) PHP ( 37 ) PostGIS ( 1 ) PostgreSQL ( 3 ) prototype.js ( 21 ) ROBOT ( 1 ) RSSリーダー ( 14 ) Ruby on Rails ( 7 ) Spry ( 6 ) SQLite ( 10 ) SQLiteWorker ( 2 ) ssh ( 1 ) SSI ( 2 ) SVG ( 15 ) TRON ( 1 ) Video ( 1 ) VML ( 1 ) Webサービス ( 89 ) widget ( 6 ) Wiki ( 1 ) Win ( 6 ) WSH ( 1 ) X01HT ( 29 ) XML ( 28 ) XOOPS ( 1 ) XQuery ( 2 ) XUL ( 3 ) Yahoo! UI ( 58 ) 日付入力用カレンダー ( 1 ) 『Ajax実践テクニック』 ( 1 ) 『入門 Ajax』 ( 42 ) WinTips ( 2 ) こりゃすごい ( 1 ) チューニング ( 20 ) ダイナミックロード関数 ( 7 ) リファレンス ( 13 ) ライブラリ ( 83 ) レーダー雨量表示 ( 1 ) ハード ( 15 ) ペンギン ( 2 ) ブラウザ ( 56 ) ブログでBBS ( 1 ) アクセスグラフ ( 3 ) カレンダーによる日付入力スクリプト ( 4 ) クロスブラウザ ( 10 ) クロスブラウザ関数 ( 7 ) スマートフォン ( 8 ) セキュリティ ( 87 ) ソフトイーサ ( 1 ) マッシュアップ ( 22 ) 暗号 ( 4 ) 映画 ( 41 ) 河川の水位グラフ ( 3 ) 回線 ( 2 ) 開発ツール ( 16 ) 牛久大仏 ( 8 ) 携帯 ( 112 ) 言語 ( 17 ) 故障 ( 1 ) 洪水警報システム ( 2 ) 今日のひと言 ( 2 ) 仕様 ( 39 ) 雑談 ( 199 ) 書籍 ( 17 ) 親子ウインドウ有無の確認関数 ( 3 ) 新海誠 ( 3 )

【info】有料サポート(ベータ)限定 承り中 /【JSサポート(仮称)】 

【費用】 とりあえず、言い値で承ります。ただし、できる範囲での限定受付です。込み具合等によりお受けできない場合がありますのであらかじめご了承ください。サポートにご納得いただけなければ料金は不要です。 逆に感動したら多くても構いません(^^;;;。

【できること】 たとえば、かも日記で無料配布されているコードのカスタマイズや、あるいは、JavaScript/Ajax全般+Webサーバーとの連携などのアドバイス&サンプル作成等 。A:jQchartなどでWeb用グラフ設置(エクセル→CSVやデータベースからWebグラフ生成)などのアドバイスやカスタマイズサンプル作成。B:ツリーメニューなどのカスタマイズサンプル。C:Google Mapsのカスタマイズ。etc...

【できないこと】 腕立て伏せ200回

【ライセンス】 私が今まで「かも日記」等で提供してきたコードの大半は、商用利用、改造、自由、連絡不要で、今後もそれらは変わりません。そして、この有料サポートによりカスタマイズコードなどが提供される場合でも、同様に、それらを商用利用しても改造しても自由です。ただし、制限のきついライブラリなどを使う場合は、各ライブラリのライセンスに準拠せざるを得ない場合があります。

【info】いつもいろいろなテストなどをページ内のあちこちでやっているので、重かったり、壊れていたりするf^^;ことも多いですが、何卒、ご了承ください ( _ _ b

【JSON このページ内へのリンク】
【MT】MTのテンプレートタグからYUIのtree用JSONを自動出力
【JSON】PHPのjson.so
【GAF】GAFを使う時の注意
【GAF】2つのリザルト形式 JSONとXML
【Webサービス】Google AJAX Feed API リリース
【JSON】バイナリJSON? BISON
【JSON】JSON in GData
【Ajax】XML から JSON を生成し、Ajax で使う
【仕様】W3C 草案 Serializing SPARQL Query Results in JSON
【Ajax】どんどんこなれるAjaxサービス(@IT)
【JSON】Remote JSON - JSONP
【JSON】Zend_Json
【仕様】RFC4627 JSON
【Ajax】時間ベースな情報のためのTimeline API
【JSON】XMLとJSON間の変換
Allabout更新
【書籍】実践Wbe 2.0 Ajaxプログラミング入門
Allabout更新
Allabout更新
【JSON】JSONRequest
【JSON】JSONがRFCに
【JSON】JSONRequest提案
【Ajax風】JSONIframeReqest
【JSON】Yahoo! JSON
【Ajax】PAJAJ (PHP Asynchronous Javascript and JSON)
【Ajax】初のPEAR“純正”Ajaxツールキット「HTML_AJAX」
戻り値にJSON
【Ajax】jamritas-0.2 リリース
【Ajax】AjaSQLを作ろうっと
【Ajax】別ドメインの最新のエントリー
【Ajax】XML->JSON変換キャッシュプロクシが欲しい
【Ajax】プレロード版最近のエントリー
【Ajax】Ajaxな最近のエントリー
【Ajax】Flashの確認、getURL()
【Ajax】RPC関連リンク
【Ajax】自家製符号化で文字化け回避
【Ajax】PerlでGETとPOST
【Ajax】PHPでGETとPOST
【Ajax】PEARのJSON
【Ajax】JSONからHTMLを展開するテンプレート
【JSON】CPANのJSON
【JSON】JSONの動作テスト2
【JSON】JSONの動作テスト
【Ajax】JSON

[ JSON ]

2007年09月30日

【MT】MTのテンプレートタグからYUIのtree用JSONを自動出力

Ajax 】 , JSON 】 , JavaScript 】 , Movable Type 】 , Yahoo! UI ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


とりあえず、一般的な方法といいますか、MTのテンプレートタグを使って、YUI tree 用のJSONデータを生成し、自動的にツリーメニューが出力されるようにしてみます。

このレベルは、普通のMobable Type(2.x ^^;;) ユーザーなら、コピペで使える方法になるかな?と思います。ただし、Ajaxサクサクな方法はNext Stepからです。

手順は、たぶん今夜、家に帰ってから書きます。

全部開く 全部閉じる


ただいま。

で、まず、MTで「新しいテンプレート・モジュール」をひとつつくります。テンプレートの名前は、なんでもよいんですが、treeJSONとでもします。中身は、とりあえず、
//MTのテンプレートタグからYUIのtree用JSONを自動出力テスト
みたいな、JavaScriptのコメントにしておきます(ここへあとでJSONを記述する予定です)。 次に、Main Indexや、Category Archive、Date-Based Archive 、Individual Entry Archive などのYUIツリーを出力する予定のページの各テンプレートのhead部分へ次のように書き、各ページのhead内でtreeJSONのスクリプトが自動展開されるように準備しておきます。
<script type="text/javascript">
<!--
<$MTInclude module="treeJSON"$>
//-->
</script>
これで、試しにブログを再構築し、ページのソースを開いてみて、、、
<script type="text/javascript">
<!--
//MTのテンプレートタグからYUIのtree用JSONを自動出力テスト
//-->
</script>
このように展開されていれば、ここまでは成功です。
で、ちょっと、柏へ行く用事が出来たので、とりあえず休憩。

ただいま帰りましたっ。

この解説はMT2.xでしか試していないので、3.xや4.xでどうなのかはまったく不明です。どちらももう削除してしまったので私は確かめることもできません。

次に、いよいよ、JSONデータの生成です。最初に作ったtreeJSONテンプレートへ下記を記述します。
//Tree Data(ここへTrreeメニューのデータをJSONで書きます)
// ["_open"] はメニュートグルを開きます。
var treeData=[
  ["<b>かも日記</b>" ,
    [
      ["_open"],
      ["エントリー " , 
        [
          ["_close"],
<MTArchiveList  lastn="9">
          ["<$MTArchiveTitle$>" , "<$MTArchiveLink$>"],
</MTArchiveList><MTArchiveList  offset="9"  lastn="1">
       //   ["<$MTArchiveTitle$>" , "<$MTArchiveLink$>"]
</MTArchiveList>["about:","http://jsgt.org/mt/archives/01/001705.html"]
        ]
      ]
    ]
  ]
]
["エントリータイトル","エントリーのURL"],の形式でとりあえず最新の9件(lastn="9")出力しています。配列の最後は「,」があるといけないので、その行だけ別建てにします。 offset="9" lastn="1" で最後の10行目だけを取り出せるか?と思ったのですが、私の勘違いなのか、バグなのか、うまくいかないので、今日はあきらめて、["about","...."]というリンクでお茶お濁しました(^^;。

これで、ブログを再構築すると、各ページのhead内のスクリプトに下記のようなJSONが生成されます(オブジェクトではなく配列なのは順序が保証されるからです)。
//Header Script
//Tree Data(ここへTrreeメニューのデータをJSONで書きます)
// ["_open"] はメニュートグルを開きます。
var treeData=[
  ["<b>かも日記</b>" ,
    [
      ["_open"],
      ["エントリー " , 
        [
          ["_close"],
          ["【MT】MTのテンプレートタグからYUIのtree用JSONを自動出力" , "http://jsgt.org/mt/archives/01/001706.html"],
          ["【Movable Type】Treeのテスト" , "http://jsgt.org/mt/archives/01/001705.html"],
          ["【Webサービス】ブログに求人情報を掲載する" , "http://jsgt.org/mt/archives/01/001704.html"],
          ["Allabout更新 YUIコネクション+ランチャーパネル" , "http://jsgt.org/mt/archives/01/001703.html"],
          ["【JavaScript】自動セミコロン挿入と改行エスケープ" , "http://jsgt.org/mt/archives/01/001702.html"],
          ["【JavaScript】自動セミコロン挿入とドット演算子など" , "http://jsgt.org/mt/archives/01/001701.html"],
          ["【雑談】お月見" , "http://jsgt.org/mt/archives/01/001699.html"],
          ["【雑談】薄い人?" , "http://jsgt.org/mt/archives/01/001698.html"],
          ["【Movable Type】MT(2x)改造計画" , "http://jsgt.org/mt/archives/01/001694.html"],
       //   ["【MT】MTのテンプレートタグからYUIのtree用JSONを自動出力" , "http://jsgt.org/mt/archives/01/001706.html"]
["Testです","http://jsgt.org/mt/archives/01/001705.html"]
        ]
      ]
    ]
  ]
]
このJSON配列が、treeData という名前の変数に代入されたことを覚えておいてください。Treeメニューを作る時にこの名前を使います。

データが準備できたところで、そろそろ、いよいよ各エントリーへの記述です。

まず、YUIを読み込みます。Yahoo!UIからダウンロードしてきて設置してもよいですが、YUIは最近(2007.8から)、Web上でもダイレクトにリンクして使用することを認めていますので、それを使います。

*Serving YUI Files from Yahoo! Serversへ行くと各コンポーネントのURLがわかります。

で、今回の結論(v2.3.1なら)はこれです。
<link rel="stylesheet" type="text/css" 
  href="http://jsgt.org/yui/2.3.0/yui/examples/treeview/assets/css/folders/tree.css">
<script type="text/javascript" 
  src="http://yui.yahooapis.com/2.3.1/build/yahoo-dom-event/yahoo-dom-event.js"></script>  
<script type="text/javascript" 
  src="http://yui.yahooapis.com/2.3.1/build/animation/animation-min.js"></script>  
<script type="text/javascript" 
  src="http://yui.yahooapis.com/2.3.1/build/treeview/treeview-min.js"></script>  
<script type="text/javascript" 
  src="http://yui.yahooapis.com/2.3.1/build/connection/connection-min.js"></script>  
でも、JSONとYUIだけではtreeメニューは自動生成されません。下記のコードを追加します。テスト後は、js外部ファイルにしておくと、キャッシュが効くので良いかもしれません。また、YUIの読み込みと下記コードも、エントリー毎に書くのではなくテンプレートにた方がコード量を減らせます。
//(namespaceは使わなくても動作します)
YAHOO.namespace('tato');//カスタマイズした関数など用に名前空間を用意しておきます

YAHOO.tato.tree = function(id) {
  this.tree = new YAHOO.widget.TreeView(id); //treeDiv1は表示するDIVのID名です
  
  //Tree描画  by Array
  this.mkTreeByArray = function (treeData,treeNode){
    if(!treeNode)treeNode = this.tree.getRoot(); 
    for(var i in treeData){
      if(!(treeData[i][0]=="_open"||treeData[i][0]=="_close")){
        var tmpNode = new YAHOO.widget.TextNode("" + treeData[i][0],treeNode, false);
        if(typeof treeData[i][1] == "string"){ 
          tmpNode.target= "sampleFrame"; 
          tmpNode.href= treeData[i][1];
        }
        if(typeof treeData[i][1] == "object"){
          if(treeData[i][1][0]=="_open")tmpNode.expand();
          this.mkTreeByArray(treeData[i][1],tmpNode); 
        }
      }
    }
    this.tree.draw();
  }
}
そして、最後に、このツリーを起動させるおまじないです。 YAHOO.util.Event.addListener(window, "load", YAHOO.tato.treeIni);でページ構築後に起動したYAHOO.tato.treeIni内の test1706.mkTreeByArray(treeData)でJSONデータを渡して自動構築します。
var fswt=fd=true;  //フェイド無し

//初期化
YAHOO.tato.treeIni = function(){
  test1706 = new YAHOO.tato.tree("menudiv1706");
  //test1706.tree.setExpandAnim(YAHOO.widget.TVAnim.FADE_IN); //フェイド処理用
  //test1706.tree.setCollapseAnim(YAHOO.widget.TVAnim.FADE_OUT); //フェイド処理用
  test1706.mkTreeByArray(treeData);//ここでTreeデータを渡します
}

//ページ読み込み後にカスタマイズ関数YAHOO.tato.treeIni()を起動します
YAHOO.util.Event.addListener(window, "load", YAHOO.tato.treeIni);
というわけで、出来上がり。
投稿者 tato : 06:31

2007年07月15日

【JSON】PHPのjson.so

JSON ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


Fedora7を入れたので、時々手の空いた時にいじってみているのですが、
今日試しに、「json」と名前の付いたファイルってあるのかな?と」思って、
ふと、「locate json」と打ち込んでみたらありました。

# locate json /etc/php.d/json.ini /usr/lib/php/modules/json.so

全く見落としてましたがf^^;PHP5.2.0からデフォルトで追加されているようです。
Itproの下記レポートによるとこのJSON拡張は、Cで書かれているので、今までのPHPものよりも圧倒的に早いとのことです。

ちなみに、cat /etc/php.d/json.ini の中身は下記の通り

; Enable json extension module
extension=json.so

【PHPウォッチ】第31回 パフォーマンス向上など,数々の新機能を搭載したPHP 5.2.0リリース
http://itpro.nikkeibp.co.jp/article/COLUMN/20061205/256101/?ST=ittrend&P=2

PHPからJSON作成を扱う
http://itpro.nikkeibp.co.jp/article/COLUMN/20070307/264116/

http://jp.php.net/results.php?q=json.so&l=ja&p=wholesite
http://www.aurore.net/projects/php-json/

投稿者 tato : 06:07

2007年04月21日

【GAF】GAFを使う時の注意

Ajax 】 , GAF 】 , JSON 】 , RSSリーダー 】 , Webサービス 】 , セキュリティ ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


GAFがあんまり便利なので、ついやってしまう ? といけないので、再度リンクしておきます。

【Webサービス】ブログツールや広告を貼るときの注意(テストサンプルあり)
http://jsgt.org/mt/archives/01/000688.html

要するに、


別ドメインのWebサービスやブログアクセサリーなどを、パスワード入力のあるページなどへ貼ると、そのページ管理者の知らないうちに、パスワードを取られる危険があります。

ということです。つまり、SCRIPT要素で別ドメインのWebサービスを読み込むことは、そのWebサービスの管理者と自分のページのdocumentの管理権限を共有してしまうということなわけです。

つまり、この場合、Googleは、APIの機能を無料で提供する代わりに、APIを張り込まれたページすべてを書き換えることも出来る権限を手に入れます。まぁ、Googleを信頼するとしても、パスワードなどをそのページで入力できるようにするのは、個人情報保護法的にもレッドカードではないかな〜?という気がします。もちろん、これはGAFに限らず、ブログツールや広告など他のものにも当てはまるという基礎的?なお話ですけど。

更に、このAPIの場合は、Googleの先のWebサービス(RSSなど)をJSONで出力するわけですから、そこのWebサービス管理者ともページの管理権限をマッシュアップする(笑)ことになります。

基本的には、信頼できるサイトの、既にパブリックなデータを利用するということになると思いますし、とても便利で有用なサービスですが、どこで、どのように使うかは、セキュリティについても考えつつ利用するのが良いかな?と思います。

投稿者 tato : 20:02

2007年04月20日

【GAF】2つのリザルト形式 JSONとXML

Ajax 】 , GAF 】 , JSON 】 , RSSリーダー 】 , Webサービス ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


Google AJAX Feed API は2つの形式で結果を返すことができます。 JSONとXMLです。 デフォルトで、APIはJSON形式で返します。JSONのフォーマットは次の通り。
JSON Result Format
  • feed
    • title
      The feed title. Corresponds to the <title> element in Atom and the <title> element in RSS.
    • link
      The URL for the HTML version of the feed. Corresponds to the <link> element in Atom and the <link> element in RSS.
    • description
      The feed description. Corresponds to the <subtitle> element in Atom and the <description> element in RSS.
    • author
      The feed author. Corresponds to the <author> element in Atom.
    • entries[]
      A list of all of the entries in the feed. Corresponds to the <entry> element in Atom and the <item> element in RSS.
      • title
        The entry title. Corresponds to the <title> element in Atom and the <title> element in RSS.
      • link
        The URL for the HTML version of the entry. Corresponds to the <link> element in Atom and the <link> element in RSS.
      • content
        The body of this entry, inlcuding HTML tags. Since this value can contain HTML tags, you should display this value using elem.innerHTML = entry.content (as opposed to using document.createTextNode). Corresponds to the <content> or <summary> elements in Atom and the <description> element in RSS.
      • contentSnippet
        A snippet (< 120 characters) version of the content attribute. The snippet does not contain any HTML tags.
      • publishedDate
        The string date on which the entry was published of the form "13 Apr 2007 12:40:07 -0700". You can parse the date with new Date(entry.date). Corresponds to the <published> element in Atom and the <pubDate> element in RSS.
      • categories[]
        A list of string tags for the entry. Corresponds to the <category> element in Atom.
投稿者 tato : 23:29

【Webサービス】Google AJAX Feed API リリース

Ajax 】 , GAF 】 , JSON 】 , RSSリーダー 】 , Webサービス ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


Google AJAX Feed API Developer Guide
http://code.google.com/apis/ajaxfeeds/documentation/

#GoogleがRSS用のプロクシを用意してくれ、それから応答を引き出すためのAPIをリリースしました、ということ?

ちょっと試してみます(下記、AtomフィードリストはGoogle AJAX Feed API経由の読み込みです)。

おお。

=ざっくり和訳=
AJAX Feed APIによって、AtomやRSSフィードをJavaScriptだけで使うことができるようになります。あなたは、それらのフィードと、自分のコンテンツや、他のAPI(たとえば、Google Maps API)を簡単にマッシュアップすることができます。

APIを使うのには、APIキーの申し込みが必要です。

JavaScriptとXMLHttpRequestは、Same origin policyを使用します (訳注:要するに別ドメインとはアクセスできないというあのルール)。これによって、あるクラスのスクリプト用の攻撃からユーザを保護しますが、多くの開発者はAjaxベースのmashupsにそれらを書くことができません(訳注:ので不便です)。

Google AJAX Feed API はウェブで利用可能な内容の特定のタイプのために簡単な回避策をこれらの制限に提供します。

Google AJAX Feed API が、がどうユーザセキュリティを保持するかに関するその他の詳細に関して以下の security notes を見てください。

投稿者 tato : 14:02

2007年02月27日

【JSON】バイナリJSON? BISON

JSON ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


バイナリフォーマット"BISON" - 概念実証が発表に
http://journal.mycom.co.jp/articles/2007/02/20/bison/

Introducing BISON - Binary Interchange Standard and Object Notation
http://www.kaijaeger.com/articles/introducing-bison-binary-interchange-standard.html

計算機デモ
http://dl.kaijaeger.com/bison/examples/calculate/bisonclient.html
Serialization/deserialization デモ
http://dl.kaijaeger.com/bison/examples/echo/bisonclient.html

Version 1, Revision 0 (April 14, 2006)
BISON (Binary Interchange Standard and Object Notation)
specification (working draft)
http://dl.kaijaeger.com/bison/BISON_specification_1_0.pdf

#ちょっと気になる取り組みです。

投稿者 tato : 06:18

2006年11月27日

【JSON】JSON in GData

JSON ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


GoogleがどんどんJSON/JSONP化を進めてますね。

JSON in GData
http://google-code-updates.blogspot.com/2006/11/json-in-gdata.html

Google Data APIs - JSON Samples
http://code.google.com/apis/gdata/samples.html

Using JSON with Google Data APIs
http://code.google.com/apis/gdata/json.html

投稿者 tato : 22:16 | トラックバック (0)

2006年10月15日

【Ajax】XML から JSON を生成し、Ajax で使う

Ajax 】 , JSON 】 , XML ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


[IBM]XML から JSON を生成し、Ajax で使う
http://www-06.ibm.com/jp/developerworks/web/library/x-xml2json/
#XSLT V2 を使い、XML で保存されたデータを JavaScript コードとしてエンコード

投稿者 tato : 22:56 | トラックバック (0)

2006年10月07日

【仕様】W3C 草案 Serializing SPARQL Query Results in JSON

JSON 】 , 仕様 ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


Serializing SPARQL Query Results in JSON
W3C Working Group Note 4 October 2006
http://www.w3.org/TR/2006/NOTE-rdf-sparql-json-res-20061004/

参考:
SPARQL Query Language for RDF
W3C Working Draft 4 October 2006
http://www.w3.org/TR/rdf-sparql-query/

投稿者 tato : 06:46 | トラックバック (0)

2006年09月01日

【Ajax】どんどんこなれるAjaxサービス(@IT)

Ajax 】 , JSON ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


第11回 JSONがRFCになり、どんどんこなれるAjaxサービス
http://www.atmarkit.co.jp/fwcr/rensai/ajaxwatch11/01.html

#おなじみの川俣 晶さんの連載ですが、、、
#>「RFCの主要部分を高橋登史朗さんがざっくり訳しています。」
#ぐぁっ、あの手抜きの和訳が@ITで広く告知されてる、、、。うう。。。でも、ま、知られてしまったらしょうがないか。<開き直り;;;。<ちゃんと訳せばいいじゃん<今は締め切り押しているので無理。<開き直るしか;;

追記2006.9.2 でも、やっぱり恥ずかしいので;;、ちょっとだけですが推敲して、整形して、訳注を足しておきました<でも訳はまだ途中のまま。

投稿者 tato : 23:45 | トラックバック (0)

2006年08月26日

【JSON】Remote JSON - JSONP

Ajax 】 , JSON 】 , JavaScript 】 , Webサービス 】 , セキュリティ ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


Remote JSON - JSONP
http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/

Web 2.0で変わるWebプログラミングの常識:
実は、Ajaxのウラにこそ勝算がある (2/5)
http://www.itmedia.co.jp/enterprise/articles/0608/25/news010_2.html

Yahoo! Web Services の Using callback=function:
http://developer.yahoo.com/common/json.html#output

追記2006.8.27 JSON with Padding Test
http://www.geocities.jp/stormriders999/jsontest.html

追記2006.8.27 [json]ブラウザからJSONで呼び出せるサービス一覧
http://d.hatena.ne.jp/shinichitomita/20060825/1156504036



JSONP(JSON with Padding)という話がでていたのでメモ。

1.ドメイン超えをするためにXHR+プロクシではなくJavaScriptのロードを使う、

ということと、

2.着信コールバック名を、クライアント側からURLクエリとしてサーバーへ渡し/返してもらう、ことで着信後の動作を自動化する

という仕組みのようです。信頼のできる関係の中で、有益な方法かなと思います。

サーバーからJavaScriptデータの着信コールバックを渡す仕組み自体は、私の関係では、古くは、たとえば10年前のNewGameWeb 用ランキングなどもそうですけれど、普通に使われていた手法だと思いますが、この新しい所は、「XHRのクロスドメインを超えて最近普及してきたWebサービスをクライアントがコールバックを指定する形で利用したい」という歴史性?かもしれません。

まだ、ざっとみただけで断言はできないので、勘違いなど指摘いただけると有り難いのですけれど、この場合のリスクには要注意かなと思います。クライアントの指定するスクリプトをサーバーが通過させなければならないからです。まさに、XHRが禁止したクロスサイトの攻撃が解禁されるわけです。

信頼不能な不特定多数のクライアント入力を前提とした(たとえば、掲示板など)では、どんなコールバックを渡されるかわからないので、防御構築には、結構手間が掛かるかもしれません。

このJSONPのページにある事例では、(new Date()).getTime();をuidに使用することで、リクエストとレスポンスの整合をはかっているようですが、クライアントの時間はあまり信用できないことと、getTime()だけでは、経験的には、複数入力時に衝突する可能性も低くないような気がしますし、推測も簡単そうです。(ちなみに、程度の違いで気休めといわれてしまうかもしれませんが、Aja