У меня возникла проблема в Firefox с загрузкой файла в iframe.Якорь должен вызвать функцию dosubf () , которая отправляет форму в iFrame, чтобы загрузить файл XML, который будет позже проанализирован с помощью Ajax и отображен в другой форме на той же странице.
Iframe динамически генерируется в тег div.Когда он загружается в первый раз, работает нормально, но в Firefox при перезагрузке содержимого в div выдается ошибка 'var ret is null'!пойманный расширением firebug.Я также заметил, что другая ошибка возникает при вызове xmlhttp.open («POST», var, var.length) , который создается для создания одного объекта html select в ячейке таблицы.Опять же, ошибка показывает, что некоторый var равен null, но в этом случае функция, которая удаляет программу, выходит за рамки!Обе функции прекрасно работают в IE9.
Для первого вопроса я думаю, что это может быть связано с событием onload.Во-вторых, я действительно не знаю, что происходит.
Ниже приведен код, который загружает HTML-форму с методом Ajax в 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 для события onclick кнопки, которая отправляет форму.
function dosubf(){
if (document.getElementById('file').value==''){
alert ("Por favor seleccione um arquivo");
return
}
document.getElementById('file_upload_form').submit();
}
И функция для события onload, которая срабатывает хорошо, когда это первая загрузка в div HTML, показанный ранее, ноне удается, когда я обновляю с Ajax этот контент на div и пытаюсь запустить 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
}
}
PHP, который оценивает загрузку файла в iFrame
<?
$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));
}
}
?>
ХорошоЯ надеюсь, что это достаточно ясно, чтобы получить некоторую помощь от вас.
Заранее благодарю за любые комментарии.