我需要快速说明如何使用隐藏的iframe上传AJAX样式的文件。这是与表单有关的HTML代码部分:
<div id = "file" class = "info"> <form id="file_upload_form" method="post" enctype="multipart/form-data" action='script/uploadScript'> <input name="file" id="file" size="27" type="file" /><br /> <input id = "uploadSubmit" type="submit" name="action" value="Upload" /> <iframe id="upload_target" name="upload_target" src="" style="width:0;height:0;border:0px solid #fff;"></iframe> </form> </div>
以下是相关的PHP:
public function uploadScript(){ $returnVals = array(); if ($_FILES["file"]["error"] > 0){ $returnVals['error'] = "Error: " . $_FILES["file"]["error"] . "<br />"; }else{ if ($_FILES["file"]["type"] != "text/plain"){ $returnVals['error'] = "Badtype"; }else{ $returnVals['text'] = file_get_contents($_FILES["file"]["tmp_name"]); } } echo json_encode($returnVals); }
因此,从本质上讲,PHP获取了文件并检查它是否是文本文件。然后,我想在JavaScript中访问返回的json。那是我感到困惑的地方…
$("#file_upload_form").submit(function() { $("#file_upload_form").target = "upload_target"; $("#upload_target").onload = uploadDone(); });
理想情况下,上传完成并加载iframe后,应调用
function uploadDone() { alert($("#upload_target").contents().find("body").text()); }
但是,这始终是空白。本质上,returnVals放置在iframe主体中,但是在警报之后,因此警报中没有任何内容。那么,有没有办法纠正这个小缺陷呢?
有什么更好的解释如何做到这一点?我整天都在用不同的示例代码来打击它,等等,没有运气:/
我本质上希望能够警告通过php代码返回的文本。顺便说一句,我这样做是因为我希望它能够在IE7和之后的所有浏览器上运行。
我将不胜感激。感谢您的时间!
好吧,我已经使用过类似的方法:
$("#upload_target")[0].contentWindow.document.body.innerHTML
…代替。但是一般的方法是相似的:检查该字符串,如果为空,则什么也不做(即立即返回)。否则,请继续分析此json。