如何在不提交的情况下上传和读取text.csv文件


How to upload and read text/csv file without submitting?

我有这个表单,我想读取上传的文件,然后使用读取的信息填写表单,而不刷新页面。

例如,第一个单词可能是"Bob",所以我希望它出现在我的输入文本"first_name"中。我一直在尝试使用JQuery或Ajax在线搜索实现这一点的方法,但似乎找不到解决方案。

可以使用前面提到的两种方法吗?如果是,如果不是,有人能给我指一个链接,或者我可以在哪里学习如何做到这一点吗?我发现的实例包括使用JQuery上传文件并在不刷新的情况下显示大小(这不是我想要的)。

我还发现了如何使用iFrame,但这又不是我想要的。我想我总是可以提交页面中包含文本文件相关信息的部分,并显示相同的表格,但要填写信息。但我觉得这有点草率,我想知道是否有更好的方法。

谢谢。

Firefox有一种方法可以做到这一点,FileFileList API提供了一种获取文件输入元素所选文件的方法,并有一种文本检索方法。

一个非常基本的例子:

注意。并非所有浏览器都支持此代码

[我认为Chrome、Firefox和Opera在撰写本文时确实如此。]

HTML:

<form>
    <input type="file" name="thefile" id="thefile" />
</form>
<div id="text"></div>

JS(使用jQuery):

$(document).ready(function() {
    $('#thefile').change(function(e) {
        if (e.target.files != undefined) {
            var reader = new FileReader();
            reader.onload = function(e) {
                $('#text').text(e.target.result);
            };
            reader.readAsText(e.target.files.item(0));
        }
        return false;
    });
});

演示:http://jsfiddle.net/FSc8y/2/

如果所选文件是CSV文件,则可以直接用javascript进行处理。

在这种情况下,.split()将用于拆分行,然后拆分字段。

我知道的唯一方法是将表单提交到隐藏的iframe。这将在不刷新页面的情况下上传文件。然后,您可以使用javascript使用任何返回的信息。这就是他们用于fake-ajax风格的图像上传的功能,该功能允许您在上传之前预览图像。事实上,它已经通过一个隐藏的iframe上传了。不幸的是,iframe不符合xhtml 1.0。

这篇文章可能会有所帮助:http://djpate.com/2009/05/24/form-submit-via-hidden-iframe-aka-fake-ajax/

你可能会问的问题是:

为什么我应该使用这种方法而不是真正的ajax?

好吧,他们是数量众多的答案,但一个很好的理由是is不需要任何类型的ajax库,您可以开始使用它即使您以前从未使用过ajax。

所以它开始了。

<form method=”post” action=”formProcess.php” target=”hiddenIFrame”><input type=”text” name=”test” /> </form>

<iframe style=”width:0px;height:0px;border:0px;” name=hiddenIFrame />

这只是一个普通表单,但你会注意到表单中的目标标记,此告诉表单在iframe中提交,而不是当前页面。

它的工作原理与A标签上的目标属性完全相同。

此外,iframe使用对用户隐藏style=”width:0px;height:0px;border:0px;”

现在文件formProcess.php与普通表单没有什么不同处理文件,但如果你想在主页上做一些事情,你有使用这样的JS:

window.parent.whatEverYouWannaDoInParentForm();

你也可以用这种方法上传文件!

请查看formphp以获取完整的示例。

干杯!

Nb:你会看到状态栏的行为就像页面正在重新加载,但事实并非如此。