ajaxFileUploadと戯れる
jQueryプラグインのajaxfileuploadを使ってみた。
画面遷移を行うことなくファイルをアップロードできるという優れもの。
ファイルサイズが軽いので中身をのぞいてみたらコンナ仕組み。
- アップロード用Formを生成し、アップロードするファイル要素をアップロード用Formにコピーする。
- このときコピーするファイルのIDはDate().getTime()により生成し、一意なIDを割り当てる。
- アップロード用Formの表示位置を top:-1200px , left:-1200px , position:absolute で見えないよう設定し、body要素に追加する。
- 画面遷移用Iframeを生成し、表示位置を top:-1000px , left:-1000px で見えないよう設定し、body要素に追加する。
- Formのtarget属性に画面遷移用Iframeを設定することでメイン画面ではなくIframeを画面遷移させて回避をしてるっぽい。
- アップロード成功時のコールバック関数が存在する場合、レスポンスのデータとステータスを引数として実行する。
- アップロード失敗時のコールバック関数が存在する場合、レスポンスのデータとステータスとエラーオブジェクトを引数として実行する。
フムフム。ハック感がプンプンしますね。
このままでも使えるけど、フォームに他の値を追加シターイ。ってことで改造。
- ajaxFileUploadをチュイーンする。
//Before この行を
var form = jQuery.createUploadForm(id, s.fileElementId);//After このように
var form = jQuery.createUploadForm(id, s.fileElementId,s.params);
- createUploadFormをチュイーンする。
//引数を
createUploadForm: function(id, fileElementId)//フヤース
createUploadForm: function(id, fileElementId,params)
//この行の下に
$(oldElement).appendTo(form);//以下を追加
for(var param in params) {
var e = $('<input type="hidden" name="'+param+'" value="'+params[param]+'" />');
$(e).appendTo(form);
}
- ajaxfileuploadを呼び出す引数にparamsオブジェクトを追加する
コンナカンジ
$.ajaxFileUpload({
url:'./cgi-bin/hogehoge.cgi',
secureuri:false,
fileElementId:"fileA",
dataType: 'json',
params : {
id : "hogehoge",
name : "fugafuga"
},
error: function (data, status, e){
alert(e);
},
success : function(data, status){
alert("フッフーイ");
}
})