jQuery Mobileでファイルアップロード

jQuery Mobile(というよりJavaScript)では、セキュリティ上の観点からajaxでmultipart/form-dataを使えません。
そこで、ifameを使って対応しました。

通常の方法を試してみる

以下のようなページ構造を考えてみます。

index.php
  • ページ1(データ一覧)
  • ページ2(データ登録) ⇒データ登録.php(data-ajax="false")
この場合、データ登録.phpから data-rel="back" 指定して戻ってもページ1が表示されてしまいます。
戻ってきたときにmobileinitあたりで「引数があればページ2に飛ばす」処理を入れれば対応できそうですが、速度が気になりました。

iframeを使った処理

formのターゲットにiframeを使ってみます。登録後にページ1に戻ります。

ページ2の概要
<script>
function upload() {
  $('#form1').submit();
  alert('登録しました');
  location.hash = 'ページ1";
}
</script>
<form id="form1" method="post" action="データ登録.php" target="upload">
<input name="dataname" id="dataname" type="text" />
<input name="photo" id="photo" type="file" />
<input type="button" value="登録" onclick="upload();" />
<iframe name="upload" style="width:0;height:0;border:0;"></iframe>
</form>
iframeのCSSでは「display:none;にすればよい」という記述も見かけますが、対応していないブラウザもあるようなのでサイズをゼロにしています。
データ登録.phpでは、通常の処理をすればOKです。

iframeを見えるようにして、データ登録.phpの最後に「登録しました」と出力するようにしてもいいかもしれません。

  • Spread The Love
  • Digg This Post
  • Tweet This Post
  • Stumble This Post
  • Submit This Post To Delicious
  • Submit This Post To Reddit
  • Submit This Post To Mixx

0 Response to “jQuery Mobileでファイルアップロード”

Leave a Reply