4

在这个问题上挠头太久了:使用 jquery.form,( http://malsup.com/jquery/form ) 和 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_dumping $_FILES 总是显示索引设置为表单元素的名称......但没有数据。

多谢你们!(对不起,我知道类似 jQuery 的问题在这些部分太频繁了)。

编辑 我发现在 Javascript 中克隆一个文件输入元素,其中包含更多信息和建议的替代方案。

我决定做的是为非 JavaScript 浏览器提供一个单一的表单,而 JavaScript/jQuery 将单一表单分成三种形式:

Head form -> File upload form -> tail form

然后我可以异步发布文件上传,当点击尾部的提交时,将表单粘合到一个 POST 中,因为它们只是文本字段。

4

2 回答 2

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>

我可以看到上述行为——该字段被克隆并附加——但它没有任何价值。由于克隆过程的一部分涉及设置字段值 - 这将违反安全限制并因此失败。

于 2010-05-18T10:55:14.653 回答
0

您不能使用 ajax 发布文件,因为出于安全原因,javascript 无法访问任何本地硬盘。

有一些方法可以使用 iFrame 来模拟 ajax 发布。这个链接就是一个很好的例子。

http://www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html

于 2010-05-18T10:54:09.340 回答