- 2009-03-23 (月)
- ブログ
例えば他のドメインから自分のブログの最新記事を取得したい場合に使える方法だと思います。
今回hisasann.comを作っていて、このブログの最新記事を取得するにはどうやるんだろうと思って試してみました。
本来ドメインが一緒なので普通にAjaxで取得すれば良いのでしょうが、たいていhtmlファイルの制作はローカルで行うと思います。
このローカルにあるhtmlファイルからAjaxを使うとなると、JSONPで取得しておけば特に問題なく動くので便利かと。
普通にXMLHttpRequestだとクロスドメインの問題が出てきちゃいますもんね。
JSONPを返すためのページを作る
ボクはまだMTは3.35を使っているので、4以降のバージョンの方とは画面が少し違うかもしれません。
まずはテンプレート画面でテンプレートを新規作成リンクをクリックします。
テンプレート名: ここは適当に
出力ファイル名: のちのちここのファイル名に対してアクセスするのでそれっぽく。たとえばentry_jsonp.htmlとかね
テンプレート内容のところに、
と書いて、htmlプロパティを持つハッシュ(連想配列)を作って、それを引数に取るjsoncallback関数を呼ぶように記述します。
MTEntriesタグのlastn属性は件数になるので、上の状態だと10件になります。
jQueryのgetJSONを使って取得してみる
callback=?とGETパラメータを渡していますが、これをするとgetJSONの中でJSONPへのアクセスだということになりscriptタグを生成してくれます。
そのときにcallback=?の?の部分に「jsonp1237786446434」のようにjsonp+現在時刻のようなfunction名を付けて、サーバーから帰ってきたときにcallback関数が呼び出されるようにしています。
ただし今回サーバーから送られてくるデータにはjsoncallbackという関数を呼び出すようになっているので、getJSONの第2引数は呼び出されません。
(MTのページでGETパラメータを取得する方法があるのなら、ちゃんと関数名を取得できるんですが方法が分かりませんw)
なので呼び出されるのはあくまでもレスポンスで返ってくるjsoncallback関数になります。
実際のURLはこんな感じ。
http://hoge.com/recent_entries.html?callback=jsonp1237786446434&_=1237786447501
今回MTからのJSONP取得をMTで作るページからやってみましたが、もっと良い方法があるかもしれません。
実際に1つactionを作って、そこからJSONPを返すのも勉強になりそうです。
ただしPerlを使えなければなりませんが・・・w
Trackback:0
- TrackBack URL for this entry
- http://hisasann.com/cgi-bin/mt/mt-tb.cgi/1165
- Listed below are links to weblogs that reference
- Movable Typeで最新の投稿をJSONPで返す方法 from HouseTect, JavaScriptな情報をあなたに





