Dojo1.3.1で非同期通信(multipart/form-data)
引き続きDojoの話:-)
dojo.xhrPostで非同期通信ができるようになったものの、multipart/form-dataのデータ(ファイルとか)が送信できないことに気がついた。ちょっと調べてみるとdojo.io.iframe.sendで送信できるとのこと。早速使ってみることにしたんだけれどもプロパティに何があるのかよくわからない。Dojoのオンラインドキュメントを見てみるもプロパティに関する記述が見当たらない。ひとまず、dojo.xhrPostと同じプロパティを設定して実行してみる。
dojo.require("dojo.io.iframe"); dojo.io.iframe.send({ contentType: "multipart/form-data", url: "/contextpath/tree", content:{ "id" : 200 }, load: callback });
dojo.xhrPostにcontentTypeプロパティがあるというドキュメントは見つけられなかったんだけど、何やら皆さん設定しているようなのでここは右に倣えということでひとまず追加してみる。後でcontentTypeを外しても大丈夫かどうか検証するとしても、今のところはこれでいい。
実行してみると...おお!ファイルが転送されました。
ファイル転送とは別にレスポンスにhtmlテキストをサーバから送信しているんだけれども、これが思った通りに受け取れない:'(
dojo.xhrPostで非同期通信したときと同じhtmlテキストをレスポンスとして返しているにも関わらず、dojo.xhrPostで受け取れていたものがdojo.io.iframe.sendでは受け取れない。どこかでタグの情報が消失するのか、たとえば、
<input type="text" value="テキスト"/> <textarea>テキストエリア</textarea>
みたいなレスポンスをサーバが送信しても、受け取るときには以下のようになってしまいます。
テキストエリア
何にしてもこれを解決しないと先に進めそうにないのでどうにかしないといけないんですが...
※2009/09/24追記
dojo.io.iframe.sendのレスポンスは一番先頭のテキストエリアの内容が返却されるのが仕様らしいです。そういう仕様なのであればそれなりに対応できそう。