LoginSignup
1
2

More than 5 years have passed since last update.

ajaxでファイルアップロードをしたいけど、任意のタイミングでアップロードしてほしい。

Posted at

はてブから転記

ファイル選択した後、すぐにはアップロードを走らせたくない。ワンクッション挟みたい。そんな時の方法。
実はこのソース。今見るとよくわからないことが多い。

・したいこと
  ボタンが押されたらファイルアップロードを走らせたい。
・解決策
  addの中に、ボタンが押されたらsubmitするよって書く

fileupload.js
$('#csvupload').fileupload({

  dataType: 'json',
  url: $.hoge.webroot + 'user_account/csv/import',
  // addを実行してからajaxが走る
  add: function(e,data) {
    data.context = $('.button_edit').click(function(){
      data.submit();
    });
  },

  done: function (e, data) {
    if(data.result.length > 0) {
      var result = true;
      var done_msg = ''; 
      var fail_msg = '';
      for(var fi = 0; fi < data.result.length; fi++) {
        result = result && data.result[fi]['success'];
        if(data.result[fi]['success'] == true) {
          done_msg += "\n" + data.result[fi]['message'];
        } else {
          fail_msg += "\n" + data.result[fi]['message'];
        }
      }
      if(result) {
        alert("アップロード完了" + done_msg);
        location.href = $.seap.webroot + 'user_account/';
      } else {
        alert("一括登録に失敗しました。" + fail_msg.replace('\\n','\n'));
        $('.filename').text('');
      }
      $('.csv_drop_field .label').html('');
    }
  },

  fail: function (e, data) {
    alert("アップロードに失敗しました");
    $('.csv_drop_field .label').html('');
  },

  progressall: function (e, data) {
    var progress = parseInt(data.loaded / data.total * 100, 10);
    var progresshtml = "アップロード中 : " + progress + "%";
    $('.csv_drop_field .label').html(progresshtml);
  },
});

よくこんなに書いてたなぁ……しみじみ。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2