2012-08-02 4 views
0

Je veux télécharger des fichiers via un composant que je développe sur Joomla 2.5, je dois prendre en charge pas les navigateurs HTML5 sans flash. Sur Joomla 1.5 j'ai utilisé avec succès this method, mais sur J2.5 après le téléchargement du fichier, lorsque la réponse json est retourné, au lieu de télécharger ma page, il montre juste la boîte de dialogue de téléchargement pour le fichier joomla.json. Comment puis-je obtenir la réponse json sur l'iframe interne?Joomla 2.5 téléchargement de fichier ajax

Merci!

Edit: c'est le code que je utilise:

showUploadImage est exécutée après la page est chargée, mais l'élément uploadIFrame est pas toujours là (lorsque le fichier de téléchargement préalable). Upload done est censé être exécuté quand la réponse avec le nom de fichier est reçu, mais avec l'erreur que j'essaye de corriger, ce code n'est jamais exécuté, à la place une boîte de dialogue pour télécharger joomla.json est affichée

function showUploadImage(evt) { 
     if (!document.getElementById("uploadIFrame")) { 

      return false; 

     } 

     var frame = document.getElementById("uploadIFrame"); 

     var doc = frame.contentDocument; 

     page = "\ 

       <html> \ 

        <head> \ 

         <link rel='stylesheet' href='<?php echo JRoute::_('components/com_tutorial/css/base.css',false); ?>' type='text/css' /> \ 

         <link rel='stylesheet' href='<?php echo JRoute::_('components/com_tutorial/css/upframe.css',false); ?>' type='text/css' /> \ 

        </head> \ 

        <body>"; 

     page += ' \ 

       <div id="waitimage"></div> \ 

       <form id="fileUploadForm" method="post" enctype="multipart/form-data" action="<?php echo JRoute::_('index.php?option=com_tutorial&view=editchapter&task=savechapimage&format=json&tutId='.$this->tutId.'&chapterId='.$this->chapterId); ?>" target="uploadTarget"> \ 

        <label class="title" for="images"><?php echo JText::_("UPLOAD IMAGE"); ?></label> \ 

        <div class="separator25"></div> \ 

        <div id="pageimages"> \ 

         <div id="newimgfields"> \ 

          <div class="controw"> \ 

           <label class="title" for="image"><?php echo JText::_('SELECT_FILE'); ?></label><input size="35" id="image" type="file" name="image" /> \ 

          </div> \ 

          <div class="controw"> \ 

           <input type="submit" onclick="document.getElementById(\'waitimage\').innerHTML=\'<div class = &quot;mooloader&quot;></div>\';" value="<?php echo JText::_('UPLOAD_IMAGE'); ?>" /> \ 

          </div> \ 

         </div> \ 

        </div> \ 

        <iframe id="uploadTarget" name="uploadTarget" src="" style="width:0;height:0;border:0px solid #fff;"></iframe> \ 

       </form> \ 

       '; 

     page += "</body></html>"; 

     // now write out the new contents 

     if (doc == undefined || doc == null) 

      doc = frame.contentWindow.document; 

     doc.open(); 

     doc.write(page); 

     doc.close(); 

     doc.getElementById("uploadTarget").onload = uploadDone; 

    } 



    function uploadDone() { 

     var frame = document.getElementById("uploadIFrame"); 

     var doc = frame.contentDocument; 

     var innerFrame = doc.getElementById("uploadTarget"); 

     var ret = innerFrame.contentDocument.getElementsByTagName("body")[0].innerHTML; 

     var data = eval("("+ret+")"); 

     alert(data); 

     if (data=="0"){ 

      alert("<?php echo JText::_('ERROR_SAVE_IMAGE'); ?>"); 

     } 

     else if (data=="") { 

     } 

     else { 

      var upImage = new Element('img',{ 

       'class':'tutmainthumb', 

       'id':'tutThumb', 

       'src':'components/com_tutorial/helpers/image.php?img='+data 

      }); 

      upImage.inject('tutImage','top'); 

      $('uploadIFrame').dispose(); 

     } 

    } 
+0

peut vraiment aider sans aucun code fourni. N'hésitez pas à utiliser mon composant SWFUpload. A été rendu simple pour permettre une intégration facile dans d'autres composants – Lodder

Répondre

0

Résolu. Il s'avère que la réponse était reçue sous le nom "Contet-type: application/json", et que tout fonctionnait bien quand il s'agissait de "Content-Type: text/html; charset = utf-8". Donc, l'erreur n'était pas sur le javascript, mais dans le contrôleur. pour résoudre ce problème, ajoutez simplement:

 header("Content-Type: text/html; charset=utf-8",true); 
     flush(); 

     echo json_encode(($imgChanging>0)?$thmbName:0); 

où l'écho est le message json qui est renvoyé à la vue.