Djangoでjson出力してjQueryで受け取る方法

2012-03-13
このエントリーをはてなブックマークに追加

以前はxml出力してクライアントでパースしたり、htmlを出力してそのまま埋め込む、っていうやり方が多かったのですが、最近はjsonを多用しています。

from django.utils import simplejson
from django.core import serializers

def index(request):

_values = simplejson.dumps([{“key0”: “value0”, “key1″:”value1″}], ensure_ascii=False)
return HttpResponse(_values, mimetype=”application/json;charset=utf-8”)

出力するのはこれだけ。非常に簡単。

Django1.3、Python2.7です。Djangoは1.1でも動いた記憶が。Pythonは2.6以降かな。まぁ2.6以降っていってもjsonの取り扱いだけですけど。あ、Python3は知りません。

jQuery側は

$.getJSON(url, function(result, status){

alert(result[0].key0);
alert(result[0].key1);

});

これだけ。jQueryは1.6使ってます。

jQueryを使ってjsonpでやりとりする

2009-02-19
このエントリーをはてなブックマークに追加

クライアント側のソース。今回のjQueryは1.3.1を利用しています。

$.ajax({
  url: ‘http://hogehoge.com/api/,
  dataType: ‘jsonp’,
  success: function(data)
  {
    成功時のコールバック関数
  }
});

hogehoge.com/api/に目的のAPIが置いてある前提です。そこにアクセスします。で、サーバ側のアクセスログを観ていると、実際にアクセスしてくるURIは

http://hogehoge.com/api/?callback=jsonp1235002429334&_=1235002440850

となっています。jQueryが付与しているんですかね。これは、結果は「jsonp1235002429334」というコールバック関数に渡してね、という意味合いのようです。クライアント側でコールバック関数の名前を指定していないのにちゃんと成功時のコールバック関数が呼ばれるのは、jQueryがこっそりと処理してくれていたからのようです。

で、サーバ側のレスポンスは

jsonp1235002429334({“address”:”東京都足立区大谷田”});

でOK。これは例として、郵便番号を投げると該当住所を返すapiです。値はクライアント側コールバック関数のdataに格納されます。住所にアクセスしたい場合は

data.address

で「東京都足立区大谷田」が返ってきます。jsonpを利用することでクロスドメインが可能になります。これで郵便番号から住所に変換、メールアドレスの正規表現チェック、等々の共通処理は一元管理できます。マスタが一箇所で済むのはメンテナンスも楽になります。

ただ、インターネット上に公開されているので、どこからアクセスがあるかわかりません。ホストで絞る、等の制限は必要かもしれませんね。

Tags: ,