Dojo1.3.1で非同期通信
仕事で非同期実装をする必要があって、既に導入済みのDojoToolkitを利用することにしました:-)
ポスト送信する場合は以下のようになり、callファンクションを呼び出すと内部でdojo.xhrPostが呼び出され、ポスト送信が非同期で行われます。
function call() { dojo.xhrPost({ url: "/contextpath/tree", content:{ "id" : 200 }, load: callback }); } function callback(response) { alert(response); }
このとき各プロパティに設定する値は次のようになります。
プロパティ | 内容 |
---|---|
url | リクエスト送信先を文字列で指定します。 |
content | 送信するパラメータ[キー:値]のセットをカンマ区切りで指定します。 |
load | レスポンスを受け取るためのコールバックファンクションを指定します。 呼び出されたコールバックファンクションは引数にレスポンスを受け取ることができます。 |
bandleAs | 上記例では記載していませんが、レスポンス形式を指定することができます。 何も指定しないとtextが指定されたことになります。他にjsonなどを指定することができるようです。 |
error | 上記例では記載していませんが、エラーレスポンスを受け取るためのコールバックファンクションを指定します。 loadで指定されたファンクションと同じように引数にエラーレスポンスを受け取ることができます。 |
テキストでレスポンスを返す場合は、そのままタグとして認識できる文字列(innerHTMLを利用してそのまま描画できる文字列)を返す場合や、簡単なメッセージを返す場合が考えられますが、あまりいいことが無いので大抵はjson形式でレスポンスを返すことが多くなります。bandleAsでjsonを指定し、レスポンスでjson形式の文字列を返すと、コールバックファンクションでは変換されたJavascriptのオブジェクトを引数として受け取ることができます。つまり、
{"id":200, "name":"テスト"}
という文字列をレスポンスとして返すと、
function callback(response) { alert("idは" + response.id); alert("名前は" + response.name); }
といった具合に値を取得することができます。便利ですね:-D