首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过AJAX发布Excel文件

通过AJAX发布Excel文件
EN

Stack Overflow用户
提问于 2019-08-09 22:31:23
回答 1查看 717关注 0票数 3

有没有办法通过AJAX POST请求发送Excel文件?我已经尝试过了,但我不知道如何通过请求包装文件。AJAX能做到这一点吗?

代码语言:javascript
复制
<form id='file-import' method="POST" enctype="multipart/form-data">
  <meta name="csrf-token" content="{{ csrf_token() }}" />
  <label>Choose File</label>
  <div class="form-group">
    <input type="file" name="file" required="required">
  </div>
  <button type="submit" class="">Import</button>
</form>
代码语言:javascript
复制
$(document).ready(function() {
  console.log('run');
  $('#file-import').submit(function(e) {
    e.preventDefault();
    let form_data = new FormData($(this)[0]);
    console.log(form_data);
    $('#content').hide();
    $('#page-loader').fadeIn();
    $.ajax({
      url: '/test/post',
      type: 'POST',
      data: 'form_data',
      headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      },
      dataType: 'json',
      success: function(data) {
        console.log('success');
      },
      error: function() {
        console.log('error');
      }
    });
    $('#page-loader').fadeOut();
    $('#content').show();
  });
});
EN

回答 1

Stack Overflow用户

发布于 2019-08-09 22:34:25

这个AJAX请求有两个主要问题。首先,您发送的是字符串文字'form_data',而不是保存在form_data变量中的实际值。您需要删除它周围的引号。

其次,在发送FormData对象时,需要将contentTypeprocessData属性添加到AJAX请求中,并且它们的值都应该为false

还要注意,当AJAX请求完成时,您需要调用fadeOut()show()。您现在拥有这些调用的位置意味着您显示加载程序,然后立即隐藏它,因为请求是异步的。要使其正常工作,请将调用移入AJAX设置中的complete处理程序。试试这个:

代码语言:javascript
复制
$('#file-import').submit(function(e) {
  e.preventDefault();
  let form_data = new FormData($(this)[0]);
  var $content = $('#content').hide();
  var $pageLoader = $('#page-loader').fadeIn();

  $.ajax({
    url: '/test/post',
    type: 'POST',
    data: form_data,
    contentType: false,
    processData: false,
    headers: {
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    dataType: 'json',
    success: function(data) {
      console.log('success');
    },
    error: function() {
      console.log('error');
    },
    complete: function() {
      $content.show();
      $pageLoader.fadeOut();
    }
  });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57432226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档