Я не могу получить XHRPOST при подаче формы через кнопку ввода, я схожу с ума
-
21-09-2019 - |
Вопрос
Это довольно длинная, версия 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.