我在Firefox中遇到问题,文件上传到iframe。一个锚应该调用函数dosubf(),它将表单发布到iFrame上传一个XML文件,该文件稍后将用Ajax解析并在同一页面上以另一种形式显示。
iframe动态生成div标签。当它第一次加载时,工作正常,但是,在Firefox中,当将内容重新加载到div中时,导致错误'var ret is null'!被firebug扩展抓住了。我还注意到在 xmlhttp.open(“POST”,var,var.length)调用上发生了另一个错误,该调用是为了在表格单元格中生成一个select html对象。同样,错误显示某些var为null但在这种情况下,删除程序的函数超出了范围!这两个函数在IE9中都运行良好。
对于第一个问题,我认为它可能与onload事件有关。对于第二个,我真的不知道发生了什么。
下面是将带有方法Ajax的html表单加载到div中以获取XML文件初始输入的代码。
<form id='file_upload_form' method='post'
enctype='multipart/form-data' target='upload_targetf'
action='include/php/util/handle/handlexml.php'>
<input name="file" id="file" type="file" />
<a href="#" class="botao" onclick="dosubf()">IMPORT</a>
<iframe id='upload_target' name='upload_targetf' onload='lerxml()' ></iframe>
</form>
用于事件的javascript,点击提交表单的按钮。
function dosubf(){
if (document.getElementById('file').value==''){
alert ("Por favor seleccione um arquivo");
return
}
document.getElementById('file_upload_form').submit();
}
事件onload的函数在第一次加载到之前显示的HTML的div中时触发良好,但是当我使用Ajax刷新div上的内容并尝试触发onload时失败。它在fire empty onload iFrame上第二次失败,当然还有按钮动作提交onload。
function lerxml(){
var ret = window.frames['upload_targetf'].document;
//Here the code breaks with a ret is null error on firebug!
var novostring='';
var d=ret.body.innerHTML;
var mess='';
if (d!=''){
d=eval("("+d+")");
//This for getting the JSON response to evaluate the file
if (d.tipo){
mess+=(d.tipo);
}
if (d.tamanho){
mess+=(d.tamanho);
}
var ok='';
if (d.sucesso){
//The filepath of the uploaded file to use Ajax for parse it later
novostring="arquivo/xml/"+d.sucesso;
}else{
novostring="";
alert (mess);
return
}
}
评估文件上传到iFrame的PHP
<?
$erro = $config = array();
$arquivo = isset($_FILES["file"]) ? $_FILES["file"] : FALSE;
$config["tamanho"] = 500000;
if($arquivo){
if(!preg_match("/^text\/xml$/",$arquivo["type"])) {
$erro['tipo'] = "Não é um arquivo XML! Por favor seleccione outro arquivo";
} else {
if($arquivo["size"] > $config["tamanho"]) {
$erro['tamanho'] = "Arquivo em tamanho muito grande!";
}
}
if(sizeof($erro)) {
foreach($erro as $err) {
$err=htmlentities($err);
}
echo json_encode($erro);
die;
}else {
$imagem_nome = md5(uniqid(time())) . ".xml";
$imagem_dir ['sucesso'] = "arquivo/xml/" . $imagem_nome;
move_uploaded_file($arquivo["tmp_name"],"../../../../".$imagem_dir ['sucesso']);
echo json_encode(htmlentities($imagem_dir));
}
}
?>
嗯,我希望能够明确地向你提供一些帮助。
提前感谢您的任何意见。
答案 0 :(得分:1)
我打赌你遇到了https://bugzilla.mozilla.org/show_bug.cgi?id=170799
尝试将window.frames['upload_targetf'].document
替换为document.getElementById("upload_target").contentDocument
,这不会出现同样的问题。