Я не могу получить XHRPOST при подаче формы через кнопку ввода, я схожу с ума

StackOverflow https://stackoverflow.com/questions/1766163

Вопрос

Это довольно длинная, версия TLDR ниже Crit Wall of Text.

Настраивать: Наша компания некоторое время использовала прототип и совсем недавно переключилась на Dojo. Я преобразовал много -много JS и устанавливал все обратно в нормальное состояние, а затем столкнулся с этой проблемой ...

Проблема: У меня есть типичная форма, настроенная с полевым полем загрузки. (Я не использую диджит и пробовал несколько вариаций из них - не работаю для меня, возможно, в 1.4, я попробую еще раз.) После нажатия кнопки отправки мои намерения должны были наблюдать за прогрессом загрузки файлов, в прототипе был простым вызовом ajax.periodicupdater (Wich является в основном Xhrget/Post, который работает снова и снова). В сочетании с APC.RFC1867 (пример: http://www.phpriot.com/articles/php-ajax-file-uploads/3) Это становится очень простым, в основном вы публикуете, и используете Ajax для получения текущего прогресса файла.

Вот где я сталкиваюсь с фактической проблемой... xhrpost (), кажется, не хочет запускать после того, как форма переходит в то, что я называю «режим отправки» (где страница проходит и загружает). APC фактически нуждается в том, что файлы находятся в «режиме отправки», чтобы опросить текущий прогресс и вернуть % через AJAX.

Что я пробовал: Только одна вещь частично сработала. Используя onclick = "" вызов xhrpost (), последовавший за возвратом false; Проблема состоит в том, что единственный способ, которым я на самом деле заработал, - это нажать кнопку «Отправить Процесс загрузки он отправил xhrpost () вместе с возвратом false;. Вероятно, это перегруженные загрузки, но то, что точно так, так это то, что данные APC подавались в строку прогресса, к сожалению, это не должно потребовать 2 щелчка. Кроме того, он тоже не закончил отправку страницы.

Я имел небольшой успех, используя Dojo.connect () к кнопке или форме.

Я имел мало успеха, используя onclick = "", если не вернуть false; настоящее.

Я имел небольшой успех, используя dojo.io.iframe, чтобы отправить отдельный запрос.

Я имел небольшой успех, используя Dojox.file.fileUpload, а также представляет собой большую сумму собственных проблем.

Кодовые фрагменты:

Старый код:

new PeriodicalExecuter(function(pe) {
    if( dojo.byId('progressbar').innerHTML == 'Processing...' ) {
        pe.stop();
    } else if( dojo.byId('progressbar').innerHTML != '' ) {
        dojo.byId('progressbar1').setStyle({
            width: dojo.byId('progressbar').innerHTML + '%'
        });
    }
}, 1);

Новый код:

    dojo.xhrPost({
        url: 'ajax/apcProgressBar.php',
        content: { progress_key: dojo.byId( 'progress_key' ).value },
        load: function( data ) {
            dojo.byId( 'progressbar' ).innerHTML = data;
            if( dojo.byId( 'progressbar' ).innerHTML != '' ) {
                dojo.style( 'progressbar1', 'width', dojo.byId( 'progressbar' ).innerHTML + '%' );
              window.setTimeout(this, 2000);
            }
        }
    });
}

Обработка APC:

if( isset( $_POST[ 'progress_key' ] ) ) {
if( $status = apc_fetch( 'upload_' . $_POST[ 'progress_key' ] ) ) {
    $progress = ceil( $status[ 'current' ] / $status[ 'total' ] * 100 );
    if ( $progress >= 100 ) {
        echo 'Processing...';
    } else {
        echo $progress;
    }
}
echo '...';

}

TLDR версия: Мне нужен способ отправить форму с файлами для загрузки, и отправить xhrpost () одновременно, и ничего, что я пробую, не работает. Единственная другая переменная заключается в том, что APC должен знать о файле, пытающемся быть загруженным, и остановка события, кажется, полностью препятствует этому.

Это было полезно?

Решение

After playing with this some more I came up with my own solution.

I made a test page that used dojo and prototype. One thing I noticed was that prototype also gave an error in the same situation, this I still don't understand, however being persistent with the ajax requests will return results, in this instance I used javascripts native setInterval() to continue requesting ajax updates. (I made a custom dojo class)

Hopefully this helps someone, in the future.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top