2017-04-04 58 views
2

我已经阅读了近20个不同的论坛帖子/ stackoverflow问题/回答关于这个,但我只是无法得到这项工作。我已经使用jQuery/PHP大约5年了,但这是我第一次需要使用AJAX做这样的事情。

所以......现在,我只是测试并尝试上传.txt文件,并尝试使用file_get_contents()获取其内容,并将其发送回我的JS代码。

我已经删除了所有花哨的工作人员并简化了我的档案,就像我可以,所以这是我的HTML文件:

<div class="container-fluid"> 
    <div class="row"> 
     <div class="col-xs-12"> 
      <form id="uploadForm" action="url/to/php/script"> 
       <input type="file" name="frame" /> 
       <input type="submit" value="UPLOAD" /> 
      </form> 
     </div> 
    </div> 
</div> 

和我的JS

$("#uploadForm").bind('submit',(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     url: 'url/to/php/script', 
     type: "POST", 
     data: new FormData(this), 
     contentType: false, 
     cache: false, 
     processData: false, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 
})); 

,并在我的PHP脚本我有var_dump($_FILES)这给我空阵列。

我的JS &窗体是从一个stackoverflow的答案复制。网址:$_POST and $_FILES empty after AJAX file upload - 因为它被标记为有效,但对我来说......仍然是空的。

通常情况下我的表格有enctype="multipart/form-data"method="post"但是没有区别。

我的jQuery的lib目录下:http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js

我来到这里是因为我觉得自己有没有更多的事情,我可以尝试,不管我做什么,$_FILES数组为空。

+1

您正在使用*非常*,***非常旧的jQuery版本。尝试将其升级到至少1.12。理想情况下,3.2,如果你不需要传统的IE支持 –

+1

你必须使用multipart/formdata作为表单类型 – mtizziani

+0

@Rory McCrossan哦....我的上帝....我已经从我的我的jquery lib复制以前的项目,但我想这次我从旧项目中复制它。哈哈我改变我的库为1.12,它现在的作品。谢谢!:) –

回答

2

你的AJAX逻辑是罚款。这个问题是因为您使用的是过时的jQuery版本,并且在过去的几年中对AJAX逻辑进行了许多调整 - 尤其是因为支持FormData以及通过发送二进制数据AJAX。

您应该将jQuery升级到至少1.12,如果您不需要传统IE支持,最好是3.2。

0
use new version jquery library like this, your ajax code looks good so for this requirement need to update your jquery library . you use old library in that case it is not working 

http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js 

更多信息

https://code.jquery.com/jquery/

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script> 
$("#uploadForm").on('submit',(function(e) { 
e.preventDefault(); 
$.ajax({ 
    url: "url/to/php/script", 
    type: "POST", 
    data: new FormData(this), 
    contentType: false, 
    cache: false, 
    processData: false, 
    success: function(data){ 
     console.log(data); 
    }   
}); 
})); 
</script>