Question

Il est assez longue, la version ci-dessous TLDR mur de texte Crit.

Configuration : Notre entreprise utilisait prototype depuis un certain temps, et tout récemment mis au Dojo. Je suis en train de convertir beaucoup et beaucoup de JS et tout réglage de sauvegarde à la normale, puis je rencontrais cette question ...

La question : J'ai une forme typique mis en place avec un champ de fichier de téléchargement. (Je ne suis pas à l'aide d'un dijit, et ont essayé plusieurs variations d'entre eux -. Ne fonctionne pas pour moi peut-être 1.4 Je vais essayer à nouveau) En appuyant sur le bouton soumettre mes intentions étaient de regarder la progression du téléchargement des fichiers, dans le prototype de cette était un simple appel ajax.PeriodicalUpdater (Wich est basiquement xhrGet / post qui fonctionne plus et plus et plus). Couplé avec apc.rfc1867 (exemple: http: //www.phpriot. com / articles / php-ajax-fichier-uploads / 3 ) cela devient très facile, vous postez basiquement, et l'utilisation ajax pour récupérer les progrès actuels du fichier.

Voici où je rencontre la question réelle ... xhrPost () ne semble pas vouloir courir après la forme va dans ce que j'appelle « soumettre le mode » (où la page est bobiner et le téléchargement). APC a besoin réellement les fichiers d'être dans le « mode submit » au sondage les progrès en cours et retourner le% via ajax.

Ce que j'ai essayé : Une seule chose a partiellement travaillé. Utilisation de l'onclick = "" appeler la xhrPost () imediately suivi par return false; Le problème est que la seule façon que je l'ai eu à fait le travail était de cliquer sur le bouton d'envoi, puis cliquez sur un bouton séparé avec return false soumettre ... Je pense que la raison pour laquelle cela a fonctionné est qu'il a commencé une normale soumettre, puis pendant le processus de téléchargement, il a envoyé le xhrPost () avec return false ;. Il est probablement les ajouts à nouveau commencé, mais ce qui est sûr que les données APC était introduit dans la barre de progression, malheureusement, cela ne devrait pas nécessiter 2 clics. En outre, il n'a pas fini de soumettre la page soit.

J'ai eu peu de succès en utilisant le bouton ou la forme dojo.connect ().

J'ai eu peu de succès en utilisant onclick = "" à moins que return false; est présente.

J'ai eu peu de succès en utilisant dojo.io.iframe pour envoyer une demande séparée.

J'ai eu peu de succès en utilisant dojox.file.FileUpload, et présente une grande somme de ses propres problèmes aussi bien.

Code Snippets :

ancien Code:

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);

Code:

    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);
            }
        }
    });
}

Traitement des 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 Version : Je besoin d'un moyen de soumettre un formulaire avec des fichiers à télécharger et envoyer xhrPost () en même temps, et rien que j'essaie œuvres. La seule autre variable est que l'APC doit savoir sur le fichier en essayant d'être téléchargé, et arrêter l'événement semble empêcher totalement.

Était-ce utile?

La solution

Après avoir joué avec un peu plus ce que je suis venu avec ma propre solution.

J'ai fait une page de test utilisé et prototype dojo. Une chose que je remarqué est que le prototype a également donné une erreur dans la même situation, ce que je ne comprends toujours pas, mais étant persistant avec les demandes ajax renverra les résultats, dans ce cas je continuer de demander des mises à jour ajax javascripts setInterval native () . (J'ai fait une classe dojo personnalisée)

Espérons que cela aide quelqu'un, à l'avenir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top