【问题标题】:jQuery ajax data with file send not working带有文件发送的jQuery ajax数据不起作用
【发布时间】:2016-02-03 06:10:50
【问题描述】:

我正在尝试使用 jQuery ajax 发送带有文件的数据。但它不起作用:

<script>
    function uploadImage() {

        var form = document.getElementById("table").value + "-form";
        alert(form);

        var formData = new FormData($("#" + form));
        $.ajax({
            url: 'update.php',
            type: 'POST',
            data: formData,
            enctype: 'multipart/form-data',
            cache: false, 
            contentType: false, 
            processData: false, 
            dataType: "json" 
        });
    }
</script>

我已经编辑了添加 enctype 和 dataType 的代码,但仍然没有将任何文件添加到根据输入动态创建的指定文件夹中。

这是我的 php 代码:

$mode=$_POST['mode'];
$table=$_POST['table'];
$fetch=$_POST['fetch'];
$id=$_POST[$fetch];
$name=$_POST['name'];
$gender=$_POST['gender'];
$pimg=$_FILES['pimg']['name'];
$size=$_FILES['pimg']['size'];
$temp=$_FILES['pimg']['tmp_name'];
$city=$_POST['city'];

$file=strtotime("now").$pimg;

$locn="files/".$id."/".$table;
if (!file_exists($locn)) {    mkdir($locn, 0777, true); }
$path=$locn."/";
$upload=move_uploaded_file($temp,$path.$file);

$con=mysql_connect("localhost","root","");
$db=mysql_select_db("test",$con);
$sql="INSERT INTO `".$table."` (name,gender,pimg,city) VALUES ('$name','$gender','$file','$city');";
$query=mysql_query($sql,$con);

通过提交按钮提交数据时,PHP代码正在工作。

【问题讨论】:

  • 为什么不起作用?您遇到了什么错误(如果有)?
  • 您是否使用 enctype="multipart/form-data" 加密了您的表单?试试这个 var formData = new FormData($("#" + form)[0]);
  • 我已经编辑了添加 enctype 和 dataType 的代码,但仍然没有将任何文件添加到根据输入动态创建的指定文件夹中。我已经用修改的代码编辑了我的问题,并添加了 PHP 代码以供参考。

标签: jquery ajax


【解决方案1】:
<script>
    function uploadImage() {

        var form = document.getElementById("table").value + "-form";
        alert(form);

        var formData = new FormData($("#" + form));
        $.ajax({
            url: 'update.php',
            type: 'POST',
            data: formData,
            enctype: 'multipart/form-data', // add
            cache: false,
            contentType: false,
            processData: false
        });
    }
</script>

如果您从 ajax 发送文件,请添加 enctype

【讨论】:

    【解决方案2】:

    这是一个猜测,因为您没有提供所有必要的信息:

    FormData 的构造函数接受一个 HTML Form 元素,而不是一个 jQuery 对象,因为它是参数:

    var formData = new FormData($("#" + form)[0]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 2023-02-05
      • 1970-01-01
      相关资源
      最近更新 更多