首頁 > 後端開發 > php教程 > javascript - jQuery+ajax文件上传失败,什么原因?

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

WBOY
發布: 2016-06-06 20:20:07
原創
1345 人瀏覽過

html部分:

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

后端php部分:ajax.php

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


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

?></code>
登入後複製
登入後複製

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

<code>$(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);  
          }  
     });  
            
})
})  </code>
登入後複製
登入後複製

报错说找不到$_FILES里的pic,为什么呢?
补充:这个地方搞定了,var fd=new FormData($("#up"));需要写成:
var fd=new FormData($("#up")[0]);
具体可见:http://segmentfault.com/q/1010000004213457
和 http://segmentfault.com/a/1190000002938709

用$.post方法的时候:

<code>$.post("ajax.php",fd,function(data){
            console.log(data);
         })</code>
登入後複製
登入後複製

报错:Uncaught TypeError: Illegal invocation
这又是为什么呢?
(jquery是1.7.1版本的)

回复内容:

html部分:

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

后端php部分:ajax.php

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


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

?></code>
登入後複製
登入後複製

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

<code>$(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);  
          }  
     });  
            
})
})  </code>
登入後複製
登入後複製

报错说找不到$_FILES里的pic,为什么呢?
补充:这个地方搞定了,var fd=new FormData($("#up"));需要写成:
var fd=new FormData($("#up")[0]);
具体可见:http://segmentfault.com/q/1010000004213457
和 http://segmentfault.com/a/1190000002938709

用$.post方法的时候:

<code>$.post("ajax.php",fd,function(data){
            console.log(data);
         })</code>
登入後複製
登入後複製

报错:Uncaught TypeError: Illegal invocation
这又是为什么呢?
(jquery是1.7.1版本的)

设置不对。

<code>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);
        }
    });
</code>
登入後複製

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

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

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

FormData

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

<code>      contentType: false, 
      processData: false,</code>
登入後複製
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板