встроенная форма iframe, используемая для загрузки файлов.Не работает при первой отправке, работает при второй - PullRequest
1 голос
/ 06 марта 2010

У меня есть встроенная форма iframe, которая берет файл из поля формы type = "file" и загружает его, используя индикатор выполнения:

<form action="sell_upload.php" method="post" id="uploadform" enctype="multipart/form-data">
    <input type="hidden" name="UPLOAD_IDENTIFIER" id="progress_key" value="<?= $uuid ?>" /> 
    <input type="hidden" name="uploaded" value="yes" />    
    <input type="hidden" name="MAX_FILE_SIZE" value="2097152" />        
    <input type="file" name="ulfile1" id="ulfile1"  onChange="beginUploadNew();"/>

beginUploadNew () выполняется при отправке (которая вызывается в onChange [вместо нажатия кнопки отправки]):

function beginUploadNew(){
$('#uploadform').submit();  
$("#uploadprogressbar").fadeIn();
progress_key= $("#progress_key").val();
alert (progress_key);
var i = setInterval(function() 
{ 
    $.getJSON("uploadprogress.php?id=" + progress_key, function(data) 
    {
        if (data == null) 
        {
            clearInterval(i);
            location.reload(true);
            //alert ("oh noes2");
            return;
        }
        //alert ("oh noes3");
        //alert (parseInt(data.bytes_total));
        var percentage = Math.floor(100 * parseInt(data.bytes_uploaded) / parseInt(data.bytes_total));
        $("#uploadprogressbar").progressBar(percentage);
    });

}, 1000);
return true;}

ПРОБЛЕМА: Иногда (обычно при первом нажатии этой кнопки отправки) кажется, что все идет хорошо, полоса загрузки исчезает, как раз когда скрипт написан, а затем внезапно перезагружает страницу, когда ничего не произошло. Я загружаю 1,5 мегабайта фотографий для тестирования, и, конечно же, у меня недостаточно времени для их загрузки.

И иногда он загружается просто отлично.

Есть предложения? Я определенно долго жду загрузки главной страницы и iframe, так что это не должно быть проблемой.

Спасибо, Jason

1 Ответ

1 голос
/ 08 марта 2010

data == null выглядит рискованно.если вы вернете что-то неправильно сформированное в php, он вернет true и завершит отображение preloader.Попробуйте:

  1. наблюдать за тем, что возвращается перед началом загрузки, и когда он равен 0%
  2. , явно возвращая некоторое завершение или отслеживая 100% и т. Д., Чтобы вы не перестали отображатьиндикатор выполнения, когда php возвращает не-JSON текст
...