在这个问题上抓了太久:在PHP中使用jquery.form,(http://malsup.com/jquery/form)...我的$_FILES['someimage']
已设置但错误编号始终为UPLOAD_ERR_NO_FILE
,大小也是0.
JavaScript:
$('form input[type=file]').change(function () {
$(this).clone().appendTo('#imgform');
$('#imgform').ajaxForm();
$('#imgform').ajaxSubmit({
type: 'POST'
});
});
附加于:
<form id="imgform" method="POST" action="/api/images.php" enctype="multipart/form-data"></form>
来自另一种具有沼泽标准文件输入的表单。
PHP日志很干净,但var_dump
$ _FILES始终显示索引设置为表单元素的名称...但没有数据。
谢谢你们! (对不起,我知道这些部分的类似jQuery的问题太频繁了。)
修改 我发现Clone a file input element in Javascript包含更多信息和建议的备选方案。
我决定要为非JavaScript浏览器提供一个表单,而JavaScript / jQuery将单个表单分成三种形式:
Head form -> File upload form -> tail form
然后我可以发布文件上传异步,当点击尾部的提交时,将表单粘贴到POST中,因为它们只是文本字段。
答案 0 :(得分:2)
我尝试运行此操作时看到的两件事。由于您正在克隆然后附加,我想知道您的文件输入是否存在于表单的上下文中。如果没有,那么$('form input[type=file]')
永远不会找到要克隆的元素。
但也许最大的问题在于浏览器处理文件上传控件的方式。您无法以编程方式在文件输入控件上设置值 - 否则,作为Web开发人员自动将文件上载值设置为“c:\ Files \ MyPasswordFile.txt”并自动将表单无形地提交给用户将是微不足道的。
当我将代码更改为:
<input type="file" name="imageFile" />
<form id="imgform" method="POST" action="/api/images.php" enctype="multipart/form-data">
</form>
<script>
$('input[type=file]').change(function() {
alert("ACTION");
$(this).clone().appendTo('#imgform');
//$('#imgform').ajaxForm();
//$('#imgform').ajaxSubmit(
// {
// type: 'POST'
// }
// );
});
</script>
我可以看到上面的行为 - 字段被克隆并附加 - 但它没有任何价值。由于部分克隆过程涉及设置字段值 - 这将违反该安全限制,因此失败。
答案 1 :(得分:0)
您无法使用ajax发布文件,因为出于安全原因,javascript无法访问任何本地硬盘驱动器。
有很多方法可以使用iFrame模仿ajax发布。这个链接就是一个很好的例子。
http://www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html