【发布时间】:2016-08-03 15:17:49
【问题描述】:
我是 Web 开发的新手,最近遇到的问题是 ajax 文件上传...
现在我有两个 HTML 输入字段;一个文件输入和一个按钮。
<input type="file" name="Frame" id="Frame_"/>
<input type="button" name="FrameButton" id="FrameButton_" value="UPLOAD"/>
单击按钮后,我会调用具有以下代码的函数..
var frame = document.getElementById('Frame_');
var frameImg = frame.files[0];
var form_data = new FormData();
form_data.append('frame', frameImg);
jQuery.ajax({
url : './handler.php',
type : 'post',
data : form_data
contentType : false,
processData : false,
success : alert("Frame Uploaded")
});
当我对 $_POST 和 $_FILES 数组进行 var_dump() 时,它会将两个数组都显示为空。尽管 Chrome Dev 阅读中的“请求有效负载”
内容配置:表单数据;名称=“框架”;文件名="GoldFrame.jpg"
内容类型:图片/jpeg
我的印象是,这意味着我在前端选择的文件的信息正在成功地“发布”到我的 handler.php 文件中。这是一个错误的解释吗?
无论哪种方式,有人可以回答我的问题吗?或者至少指向一个可能有我答案的资源?似乎有很多类似的问题,但我还没有看到一个有可靠答案的问题。
我过去曾将 iframe 用于此类事情,但这似乎是一种非常 hacky 的方法,我希望将来可以灵活地使用 ajax 来完成此类任务。
感谢您的帮助。
【问题讨论】:
-
这里;访问php.net/manual/en/function.error-reporting.php,然后将其应用于您的代码。还要检查您的控制台。
-
您设置了错误的内容类型,这意味着 jquery 不发送任何类型。如果 PHP 没有看到合适的类型进入,它不会假设表单/文件提交,也不会解析/填充 $_POST/$_FILES 的输入。您还将 processData 设置为 false,因此您传入的对象也不被处理为正常提交。
-
检查文件上传的内容类型。你有一个错误。之后,您可以从浏览器控制台检查 Ajax 调用是否正确。如果它给出了错误,那么你应该检查一下。
-
如果您的按钮在表单中,您需要停止表单提交,否则您的页面将在 AJAX 请求完成之前重新加载
-
你的表单元素上是否有
enctype="multipart/form-data"?
标签: javascript php jquery ajax