在这个问题上挠头太久了:Using jquery.form, ( http://malsup.com/jquery/form ) with PHP ... 我的 $_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
ing $_FILES 总是显示索引设置为表单元素的名称...但没有数据。
谢谢大家! (抱歉,我知道在这些部分出现类似 jQuery 的问题太频繁了)。
编辑 我找到了 Clone a file input element in Javascript其中包含更多信息和建议的替代方案。
我决定为非 JavaScript 浏览器提供单一表单,而 JavaScript/jQuery 将单一表单分为三种形式:
头部表单->文件上传表单->尾部表单
然后我可以异步发布文件上传,当尾部的提交被点击时,将表单粘合到一个 POST 中,因为它们只是文本字段。
最佳答案
当我尝试运行它时,我看到了两件事。由于您是克隆然后附加,我想知道您的文件输入是否存在于表单的上下文中。否则,$('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>
我可以看到上面的行为 - 该字段被克隆并附加 - 但它没有任何值(value)。由于部分克隆过程涉及设置字段值 - 这将违反该安全限制并因此失败。
关于php - jqueryForm 和空上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2856081/