核心提示:作为一个开发人员,踩坑是必要的,不踩坑是不长进的。今天我们就来谈谈ajax上传文件时可能遇到的几个大坑。html 文件:/pinput type=file id=fileloadername=file...
       作为一个开发人员,踩坑是必要的,不踩坑是不长进的。今天我们就来谈谈ajax上传文件时可能遇到的几个大坑。
html 文件:
</p> <input type="file" id="fileloader" name="file" /> <button id="fileuploader">开始上传</button> </p>
需要添加的js文件jquery-2.1.4.min.js,
自定义的ajax代码片段,
$(function(){
    $('#fileuploader').click(function () {
    //获取上传文件的相关信息,得到的数据是数组格式
        var fileArray = document.getElementById('fileloader').files;
        var formData = new FormData();
       for(var i=0; i上面的代码是ajax向服务器传递文件的方法,其中需要特别注意: 
1.async:false,  
false为同步,这个Ajax请求将整个浏览器锁死,只有upLoad_File方法执行结束后,才可以执行其它操作。 
2.async: true, 
 true是异步的,这个ajax请求和其后面的操作是异步执行的,那么当upLoad_File方法还未执行完,就可能已经执行了 ajax请求后面的操作,如:alert(responseStr.info);然而,info这个数据是在ajax请求success后才赋值的,结果,输出时会为空。
当然还有另一种方式来达到和同步的同种效果,那就是在函数体末尾加 return false;来防止函数的继续调用。
服务器接收文件 
 我用的是php语言和thinkphp框架,编写的接收方法如下
 public function upLoad_File(){
         //文件保存路径
         $output_dir = APP_PATH."/../upload/";
         //获取上传文件名
         $fileName=$_FILES['fileArray']['name'];
         //获取上传文件
         $file=$_FILES['fileArray'];
         if (!isset($file)){
                $this->ajaxReturn(array(
                    'msg'=>0,
                    "info"=>"文件上传失败!",
                ));
            }else{
//上传文件
          if(!@move_uploaded_file($file['tmp_name'],$output_dir.$fileName)){
                        $this->ajaxReturn(array(
                            'msg'=>0,
                            "info"=>"文件上传失败!",
                        ));
                    } ;
                    $this->ajaxReturn(array(
                        'msg'=>1,
                        "info"=>"文件上传成功!!",
                    ));
                   // return $fileName;
        }
     }
服务端接收文件需要注意的地方是$_FILES[‘fileArray’],它就是ajax传过来的formData.append(“fileArray”, fileArray[i])数据。
						


 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                 
            
                