小编典典

jQuery文件上传隐藏的IFrame

ajax

我需要快速说明如何使用隐藏的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和之后的所有浏览器上运行。

我将不胜感激。感谢您的时间!


阅读 209

收藏
2020-07-26

共1个答案

小编典典

好吧,我已经使用过类似的方法:

$("#upload_target")[0].contentWindow.document.body.innerHTML

…代替。但是一般的方法是相似的:检查该字符串,如果为空,则什么也不做(即立即返回)。否则,请继续分析此json。

2020-07-26