我有这个表单,我想读取上传的文件,然后使用读取的信息填写表单,而不刷新页面。
例如,第一个单词可能是"Bob",所以我希望它出现在我的输入文本"first_name"中。我一直在尝试使用JQuery或Ajax在线搜索实现这一点的方法,但似乎找不到解决方案。
可以使用前面提到的两种方法吗?如果是,如果不是,有人能给我指一个链接,或者我可以在哪里学习如何做到这一点吗?我发现的实例包括使用JQuery上传文件并在不刷新的情况下显示大小(这不是我想要的)。
我还发现了如何使用iFrame,但这又不是我想要的。我想我总是可以提交页面中包含文本文件相关信息的部分,并显示相同的表格,但要填写信息。但我觉得这有点草率,我想知道是否有更好的方法。
谢谢。
Firefox有一种方法可以做到这一点,File
和FileList
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:你会看到状态栏的行为就像页面正在重新加载,但事实并非如此。