【问题标题】:upload file through ajax通过ajax上传文件
【发布时间】:2013-01-24 06:35:43
【问题描述】:

我使用 2 个文件 index.js,upload.php 尝试通过 ajax 上传文件(img),如果成功附加到 div uploadfile_show
但它不起作用,几乎没有问题,下面是我的代码有什么建议吗?

谢谢。

上传.php
1.form enctype还需要加吗?
2. if($_FILES) 并检查 $_FILES 大小或 tmp_name 是否仍然使用 $_FILES

if($_FILES){
    $filename = $_FILES['uploadfile']['name'];
    $filetmp = $_FILES['uploadfile']['tmp_name'];
    $filesize = $_FILES['uploadfile']['size'];
    if($filesize < 1000000){
        move_uploaded_file($filetmp,'upload/tmp/'.$filename);
        print"
            upload success
            <img src=\"upload/tmp/$filename\">
        ";
    }
    else{
    }
}
else{
    print"
        <div class=\"uploaddiv\">
            <form enctype=\"multipart/form_data\">
                <input type=\"type\" name=\"uploadfile\">
                <input type=\"submit\" value=\"upload\" class=\"btn\">
            </form>
        </div>
    ";
}
print"
    <div class=\"uploadfile_show\"></div>
";

index.js
3. 这几行是对的吗?
var uf = $('.uploaddiv form');var fd = new FormData(uf);fd.append('uploadfile', uploadfile);
data: fd,
4. 有什么我遗漏或错误的吗?

$('.btn').click(function(){
    var uf = $('.uploaddiv form');
    var fd = new FormData(uf);
    fd.append('uploadfile', uploadfile);
    $.ajax({
        type: "POST",
        url: "upload.php",
        data: fd,
        processData:false,
        contentType: false,
        success: function(html){
            $('.uploadfile_show').append(html);
        }
    });
});

【问题讨论】:

标签: php jquery ajax


【解决方案1】:

FormData 在其构造函数中采用一个表单元素而不是 jQuery 对象,同样当您使用 ajax 提交表单时,您必须通过调用 preventDefault() 来阻止其默认操作(即提交)

$('.btn').click(function(e){
    e.preventDefault();
    var uf = $('.uploaddiv form');
    var fd = new FormData(uf[0]);
    $.ajax({
        type: "POST",
        url: "upload.php",
        data: fd,
        processData:false,
        contentType: false,
        success: function(html){
            $('.uploadfile_show').append(html);
        }
    });
});

【讨论】:

  • @user1775888 你在这里缺少/ 'upload/tmp'.$filename, 'upload/tmp/'.$filename 你也可能想使用basename, $filename = basename($_FILES['uploadfile']['name']);
  • 但是在我点击 btn 之后,url 会变成这样index.php? uploadfile= 并且不显示任何东西..
  • @user1775888 抱歉,我以为按钮在表单之外。查看更新
猜你喜欢
  • 1970-01-01
  • 2011-06-22
  • 2012-10-29
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
相关资源
最近更新 更多