【问题标题】:Can't prevent page reload after form submit/file upload表单提交/文件上传后无法阻止页面重新加载
【发布时间】:2017-08-08 17:30:47
【问题描述】:

我想将带有 ajax 的照片上传到 Express,但每次我提交表单时,它都不会生成我在代码中拥有的 html,它只会重定向我并将图片数据显示为对象。是否甚至可以上传图片,如果成功,生成所需的 html 响应?

这里是快递代码:

const storage = multer.diskStorage({
   destination: function (req, file, cb) {
      cb(null, 'public/uploads/basic_uploads/')
   },
   filename: function (req, file, cb) {
      cb(null, Date.now() + '-' + file.originalname)
   }
});
const upload = multer({ storage: storage })

router.post('/ajax_upload', upload.single('ajaxFile'), (req, res) => {
   let data = req.file;
   res.status(200).json(data)
});

上传图片一切正常。

然后(Ajax):

$(document).ready(function (event){
      $("#uploadForm").on('submit',( function (event) {
         event.preventDefault();
         $.ajax({
            url: "/ajax_upload",
            type: "POST",
            data:  new FormData(this),
            contentType: false,
            cache: false,
            processData: false,
            success: successHandler,
            error: function(error){
               $("#targetLayer").html(`<span>` + error + `</span>`)
            }
         });
      }));

      function successHandler(data) {
         // let html = `<img src="/uploads/basic_uploads/` + data.filename + `" >`
         // $("#targetLayer").html(html)
         $("#targetLayer").html(`<p>AT LAAAAAST</p>`)

      }
});

这里是html:

<div class="well">
                <form id="uploadForm" action="/ajax_upload" method="POST" enctype="multipart/form-data" onsubmit="submitFormAjax();return false;">
                    <div class="form-group">
                        <label for="exampleInputFile">Ajax file Upload with Multer</label>
                        <input type="file" name="ajaxFile" id="exampleInputFile">
                    </div>
                        <input class="btn btn-primary" type="submit" value="Basic file Upload">
                </form>
                <div id="targetLayer"></div>

            </div>

【问题讨论】:

  • 我只想向客户端显示下载链接

标签: jquery html node.js ajax express


【解决方案1】:

在successHandler函数后添加return false语句再试一次,

$(document).ready(function (event){
  $("#uploadForm").on('submit',( function (event) {
     event.preventDefault();
     $.ajax({
        url: "/ajax_upload",
        type: "POST",
        data:  new FormData(this),
        contentType: false,
        cache: false,
        processData: false,
        success: successHandler,
        error: function(error){
           $("#targetLayer").html(`<span>` + error + `</span>`)
        }
     });
  }));

  function successHandler(data) {
     // let html = `<img src="/uploads/basic_uploads/` + data.filename + `" >`
     // $("#targetLayer").html(html)
     $("#targetLayer").html(`<p>AT LAAAAAST</p>`)

  }

 return false;
});

【讨论】:

  • 仍然重定向我:(
  • 尝试将按钮类型从提交替换为按钮
  • 我没有收到错误,我只是被显示的 json 数据重定向,这是屏幕截图:ibb.co/dSAZ7F 我已经尝试了这两种解决方案。返回 false,改变 type="button"。我仍然被重定向。
  • 我已经通过在其他地方删除提交输入并在其上应用 onclick 方法解决了这个问题。
猜你喜欢
  • 2013-08-18
  • 2016-03-15
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
相关资源
最近更新 更多