0

テキストファイルをPythonスクリプトにアップロードしようとしています。フォームデータをアップロードして使用する場合

form_contents = $(this).serialize() + "&async=true"; 

その後、フォームはWebページに残り、結果が表示されます。使用する場合

var formData = new FormData($('form')[0]);

フォームとデータファイルを送信しますが、Webページには残りません。&async=true+を追加して、Webページにとどまるにはどうすればよいですか。または、これを行う別の方法はありますか?

Webページにとどまりますが、ファイルをアップロードしません:

          $('#upload').submit(function () {
      form_contents = $(this).serialize() + "&async=true";
      form_action = $(this).attr('action');

      $.ajax({
      type: 'post',
          data: formData,
      url: form_action,
      success: function (result) {
      $('#upload').html(result);
      } 
      });
      return false;
  });

Webページにとどまらず、ファイルをアップロードします。

$('#upload').submit(function () {
    var formData = new FormData($('form')[0]);
    form_action = $(this).attr('action');

    $.ajax({
    type: 'post',
    xhr: function() {
        myXhr = $.ajaxSettings.xhr();
        if(myXhr.upload){ 
        myXhr.upload.addEventListener('progress',progressHandlingFunction, false);
    }
    return myXhr;
    },
    data: formData,
    url: form_action,
    success: function (result) {
        $('#upload').html(result);
    }
    });
    return false;
    });

ご協力いただきありがとうございます、

マット

4

2 に答える 2

0

また、contentTypeパラメーターとprocessDataパラメーターをfalseに設定する必要があります。

$('#upload').submit(function () {
  var formData = new FormData($('form')[0]);
  form_action = $(this).attr('action');

  $.ajax({
    type: 'post',
    xhr: function () {
      myXhr = $.ajaxSettings.xhr();
      if (myXhr.upload) {
        myXhr.upload.addEventListener('progress', progressHandlingFunction, false);
      }
      return myXhr;
    },
    data: formData,
    url: form_action,
    processData: false,
    contentType: false,
    success: function (result) {
      $('#upload').html(result);
    }
  });
  return false;
});

ただし、エラーが発生した場合、フォームはに到達しないため、フォームは引き続き送信されますreturn false;。エラーを確認できるようにそれを停止するには、event.preventDefaultを使用します。

$('#upload').submit(function (e) {
  e.preventDefault();
  var formData = new FormData($('form')[0]);
  form_action = $(this).attr('action');

  $.ajax({
    type: 'post',
    xhr: function () {
      myXhr = $.ajaxSettings.xhr();
      if (myXhr.upload) {
        myXhr.upload.addEventListener('progress', progressHandlingFunction, false);
      }
      return myXhr;
    },
    data: formData,
    url: form_action,
    processData: false,
    contentType: false,
    success: function (result) {
      $('#upload').html(result);
    }
  });
});
于 2013-01-16T18:23:40.040 に答える