jQuery+ajax文件上传失败,什么原因?

发布于 2022-09-02 00:39:06 字数 1072 浏览 37 评论 0

html部分:

<h2>文件上传</h2>
        <form id="up">
        <input type="file" name="pic" class="pic" />
        <input type="button" value="提交" class="sub" />
     </form>

后端php部分:ajax.php

<?php 
header("Content-Type: text/html;charset=utf8");


move_uploaded_file($_FILES["pic"]["tmp_name"],
"./" . "www.png");

?>

js部分,用js上传的时候是成功的,但用jquery的时候出现了两种错误:
一种是用$.ajax方法:

$(function(){
        $(".sub").click(function(){
    
         var fd=new FormData($("#up"));
             
       $.ajax({  
          url: 'ajax.php' ,  
          type: 'POST',  
          data: fd,  
          async: false,  
          cache: false,  
          contentType: false, 
          processData: false,  
          success: function (returndata) {  
              alert(returndata);  
          },  
          error: function (returndata) {  
              alert(returndata);  
          }  
     });  
            
})
})  

报错说找不到$_FILES里的pic,为什么呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

伪装你 2022-09-09 00:39:07
      contentType: false, 
      processData: false,
新人笑 2022-09-09 00:39:06

1. 使用 $.ajax 方法时出现错误,是因为这个地方搞定了,

var fd=new FormData($("#up"));

需要写成:

var fd=new FormData($("#up")[0]);

具体可见:http://segmentfault.com/q/101...
http://segmentfault.com/a/119...

2. 用$.post方法的时候:

$.post("ajax.php",fd,function(data){
            console.log(data);
         })

报错:Uncaught TypeError: Illegal invocation
原因是$.post其实是$.ajax的简写方式,不能设置更多的参数,不能直接发二进制文件,必须使用 $.ajax 方法像问题详情里那样写。

但如果说懒得用$.ajax的话,可以用FileReader读取文件的内容,为base64的数据,就可以直接用$.post来发给后端了,当然后端的处理方式会不太一样。

☆獨立☆ 2022-09-09 00:39:06

设置不对。

var data = new FormData();
data.append('file', $('input[type=file]')[0].files[0]);
$.ajax({
        url: 'ajax.php',
        data: data,
        processData: false,
        type: 'POST'
        contentType: 'multipart/form-data',
        mimeType: 'multipart/form-data',
        success: function (data) {
            alert(data);
        }
    });
三生池水覆流年 2022-09-09 00:39:06

Ajax是不能上传附件的,如果需要上传附件请参考使用jQuery form插件

风吹短裙飘 2022-09-09 00:39:06

ajax只能传输文本流,不能运输二进制的文件。

蝶舞 2022-09-09 00:39:06

可参考我写的关于FormData不刷新上传文件

FormData

尽揽少女心 2022-09-09 00:39:06

ajax不能上传文件,还有form上传文件的enctype属性是要有的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文