0

Joomla 2.5 で開発しているコンポーネントを介してファイルをアップロードしたいのですが、Flash なしで HTML5 ブラウザーをサポートする必要はありません。Joomla 1.5 ではこの方法を使用しましたが、J2.5 ではファイルのアップロード後に json 応答が返されたときに、ページをアップロードする代わりに、joomla.json ファイルのダウンロード ダイアログが表示されるだけです。内側の iframe で json 応答を正常に受信するにはどうすればよいですか?

ありがとう!

編集:これは私が使用しているコードです:

showUploadImage はページが読み込まれた後に実行されますが、uploadIFrame 要素が常に存在するとは限りません (ファイルのアップロードが不要な場合)。アップロード完了は、ファイル名の応答が受信されたときに実行されるはずですが、修正しようとしているエラーで、このコードは実行されず、代わりに joomla.json をダウンロードするダイアログが表示されます

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

        }

    }
4

1 に答える 1

0

解決しました。応答は「Contet-type: application/json」として受信されており、「Content-Type: text/html; charset=utf-8」の場合はすべて正常に機能していたことがわかりました。したがって、エラーはJavaScriptではなく、コントローラーにありました。それを修正するには、次を追加します。

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

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

echo は、ビューに送り返される json メッセージです。

于 2012-08-02T04:14:41.037 に答える