Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用JQuery和formData正确获取表单数据_Javascript_Php_Jquery_Ajax - Fatal编程技术网

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

Javascript 如何使用JQuery和formData正确获取表单数据,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我试图使用ajax和php上传一些表单数据,但由于某些原因,我的数据没有被捕获或传递 以下是我所拥有的: form.html(包含3个文本输入和1个文件的基本表单) 没有传递任何内容,POST调用为空(请参见下面的屏幕截图)。 **addres.php** 如果将contentType选项设置为false,将强制jQuery不添加内容类型头,否则,它将丢失边界字符串。此外,当通过多部分/表单提交文件时,必须将processData标志设置为false,否则,jQuery将尝试将FormDat

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

以下是我所拥有的:

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

没有传递任何内容,POST调用为空(请参见下面的屏幕截图)。

**addres.php**
如果将contentType选项设置为false,将强制jQuery不添加内容类型头,否则,它将丢失边界字符串。此外,当通过多部分/表单提交文件时,必须将processData标志设置为false,否则,jQuery将尝试将FormData转换为字符串,这将失败

使用

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

其他信息: 通过使用console.log()查看formData如何传递到php页面的差异

希望这有帮助

额外信息请阅读此


注意:formData在IE 9中不起作用

您可以使用.serializeArray()以数组格式获取数据,然后将其转换为对象。像这样:

    function getFormData(formId) {
       let formData = {};
       let inputs = $('#'+formId).serializeArray();
       $.each(inputs, function (i, input) {
          formData[input.name] = input.value;
      });
      return formData;
   }

感谢iceburg,现在正在传递数据,但是$\u文件是空的。关于如何访问php端的数据,通常我会使用$_POST['titulo']作为示例,但这不起作用。您是否获得文件名。尝试编辑版本。是的,但在var\u转储($\u POST)中@冰山:你确定
contentType:false
在这里是个好主意吗?根据文档,它使jQuery根本不发送
内容类型
标题,但需要上传文件
多部分/表单数据
。@CBroe contentType选项用于传递文件的多部分/表单数据表单。如果将contentType选项设置为false,将强制jQuery不添加内容类型头,否则,它将丢失边界字符串。此外,当通过多部分/表单提交文件时,必须将processData标志设置为false,否则,jQuery将尝试将FormData转换为字符串,这将失败。根据
**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!");
});
 $_FILES['file-0']
    var formData = new FormData($('#superform')[0]);
    console.log(formData);

    var formDataSerialized = $('#superform').serialize();
    console.log(formDataSerialized);
    function getFormData(formId) {
       let formData = {};
       let inputs = $('#'+formId).serializeArray();
       $.each(inputs, function (i, input) {
          formData[input.name] = input.value;
      });
      return formData;
   }