javascript - 如何使用 JQuery 和 formData 正确获取表单数据

标签 javascript php jquery ajax

我正在尝试使用 ajax 和 php 上传一些表单数据,但由于某种原因我的数据没有被捕获或传递。

这是我的:

form.html(具有 3 个文本输入和 1 个文件的基本表单)

<form class="form" id="superform" action="nada.php" method="post" enctype="multipart/form-data">
          <div class="form-group">
              <label for="tituloQuiz">Resultado:</label>
              <input type="text" class="form-control resultado" id="titulo" name="titulo" placeholder="Ex: Paris">
          </div>

          <div class="form-group">
              <label for="desc">Descrição do Site:</label>
              <textarea  class="form-control" id="desc" name="descricao" placeholder="Ex:"></textarea>
          </div>

          <div class="form-group">
              <label for="desc">OG FB DESC:</label>
              <textarea  class="form-control" id="facedes" name="descricao" placeholder="facebook description"></textarea>
          </div>

          <div class="form-group">
            <label for="imggrande">Imagem</label>
            <input type="file" id="imggrande" name="imgres">
            <p class="help-block">Imagem usada na página de resultado e Facebook 600 x 400.</p>
          </div>
          <button type="button" class="btn btn-primary btn-lg addres">Adicionar Resultado</button>
          <button type="button" class="btn btn-danger btn-lg">Próxima Etapa</button>
       </form>

这是进行 ajax 调用的 JS: myjs.js

 $("document").ready(function(){
     $('.row').on('click','.addres',function(){
         console.log('Click Detectado');
         var formulario = $('#superform');
         var formData = new FormData(formulario);

          $.ajax({

                  type: "POST",
                  url: "addres.php",
                  data: formData,
                  async: false,
                  success: function(data) {
                        console.log('Funcionou');
                  },
                  error: function(data) {
                      console.log('Erro no formulario');
                  },
                  cache: false,
                  contetType: false,
                  processData: false
          });


     });
 });

未传递任何内容且 POST 调用为空(请参见下面的屏幕截图)。 Empty Post enter image description here

**addres.php**
<?php
   var_dump($_FILES);
   var_dump($_POST);

?>

最佳答案

 $.ajax({
    url: 'address.php', 
    type: 'POST',
    data: new FormData($('#superform')[0]), // The form with the file    inputs.
    processData: false,                          // Using FormData, no need to process data.
    contentType:false
  }).done(function(){
     console.log("Success: Files sent!");
  }).fail(function(){
     console.log("An error occurred, the files couldn't be sent!");
});

当将 contentType 选项设置为 false 时,它​​会强制 jQuery 不添加 Content-Type header ,否则,边界字符串将丢失。此外,当通过 multi-part/form 提交文件时,必须将 processData 标志设置为 false,否则,jQuery 将尝试将您的 FormData 转换为字符串,这将失败。

使用 php 读取

 $_FILES['file-0']

(只有一个文件,file-0,除非您在文件输入中指定了 multiple 属性,在这种情况下,数字将随着每个文件递增。)

附加信息: 亲眼看看使用 console.log() 将 formData 传递到 php 页面的方式有何不同。

    var formData = new FormData($('#superform')[0]);
    console.log(formData);

    var formDataSerialized = $('#superform').serialize();
    console.log(formDataSerialized);

希望这对您有所帮助。

更多信息阅读此 upload files asynchronously

注意:formData 在 IE 9 中不工作

关于javascript - 如何使用 JQuery 和 formData 正确获取表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29195763/

相关文章:

asp.net - __doPostBack 不在回发时呈现

php - 用户 root @ localhost 的访问被拒绝

php - 如何在 OS X 10.9 上使用 OpenSSL 编译 PHP?

jquery - 为循环中的每个图像重复 CSS 设置 (jQuery)

javascript - 我如何知道 JavaScript 中的函数何时被调用?

javascript - 递归遍历 Shadow 和 Light DOM

javascript - 捕获 block 在节点提取中不起作用

php - 从html通过php发送邮件会返回php页面。它应该采用相同的联系表格。怎么做?

javascript - 检查textarea是否为空

javascript - jQuery 和 Greensock 动画——使用类名对屏幕上的所有元素进行动画处理