jqueryForm和空上传

时间:2010-05-18 09:45:39

标签: php jquery http jqueryform

在这个问题上抓了太久:在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中,因为它们只是文本字段。

2 个答案:

答案 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