0

ファイルのアップロードを含むフォームと、アップロードされたファイルをリストするグリッドの下にあります。ajaxForm ( jquery.form.js ) を使用して ajax ファイルのアップロードを実行しています。ファイルのアップロードが成功すると、サーバーから返されたセキュリティ コード (サーバー上で作成) が返されることを期待します。これは、後でグリッドのリンクからそのファイルをダウンロードする際に引数として渡されます。

ファイルのアップロードが失敗した場合 (つまり、無効なファイルまたは大きすぎるファイル)、ユーザーに同じことを通知する必要があります。同じためにtaconite プラグインを使用します。アップロードが成功すると、メッセージが表示され、関数が呼び出されてグリッドにセキュリティ コードが設定されます。失敗した場合は、ユーザーにメッセージを表示し、関数を呼び出してグリッドからアップロード エントリを削除します (失敗したため)。

私はグリッドからフィールドを削除するための同様のメカニズムを持っています.delete postリクエストが送信され($.post(...))、taconiteの結果がサーバーから返されます。これは期待どおりにうまく機能します。しかし、.ajaxForm (ファイルのアップロードあり) は IE では期待どおりに動作しません。

ajaxForm 呼び出しのスニペットは次のとおりです -

成功: 関数 (responseXML、statusText、xhr、frm) { ... }

FF(Firefox) では何も心配する必要はありません。taconite の応答 (responseXML に入っています) は正しく解析されます。しかし、IE では responseXML は xml objectです。IE の一部のバージョンは、xhr.responseXML.xml または xhr.responseXML.text または xhr.responseXML.documentElement.textContent から xml テキストを提供しますが、一貫性がありません。とにかくxmlテキストを取得するには?

それに加えて、一時 div で xml コンテンツを手動で設定しても、taconite プラグイン操作を呼び出したり実行したりしません!

これは複雑に聞こえるかもしれませんが、私が得た唯一の手がかりは、ajaxForm + taconite + ファイルのアップロードに問題があるということです。ファイルのアップロードでない場合、taconite は IE と FF の両方で期待どおりに実行されます (ファイルの削除機能のように)。微調整して試してみることができる提案があれば、共有してください!


返されたタコナイトのサンプルを次に示します -

<taconite>
<replaceContent select="#fileOprMsg">
<span id="oprResult">Operation was successful<span class="error"></span></span>
<script>$().ready(function () { showOprResult('#oprResult', 1); });</script></replaceContent>
<eval><![CDATA[ fileUploadResponse('dcrc%22uycok0lri%3d9%3a3g%3a6%3a%3b%2f7ehd%2f6chf%2f%3a6de%2fghgcg4c7dgh4%3dVtwg',true,-1); ]]> </eval>
</taconite>
4

1 に答える 1

0

Pheew .. これは、私が今まで直面した中で最も悪名高い IE と FF の競合の 1 つであり、IE はあきらめませんでした! xhr.responseXML 要素を解析しようとすることから、そのコンテンツを隠し要素に動的に割り当てることまで、スクリプトとしてレンダリングしようとしてもすべて失敗しました。

最後に、苛立たしい日々を過ごした後、実際の taconite プラグイン ファイルに取り組み、そのスクリプトを見直して、活用できる機能や方法を見つけようとしました。

これがどれほど安定しているか合法かはわかりませんが、私にとってはうまくいきます-

$('#frmFiles').ajaxForm({
                dataType: 'xml',
        ...
        success: function (responseXML, statusText, xhr, frm) {
            ...
            /* FF gives xml string in - xhr.responseText */
            ...
            if (xhr.responseXML != null){
                var tc = new $.taconite(responseXML); // only for IE
            }
        ...
        });

ここで私が行ったことは、responseXML を使用して taconite インスタンスを明示的に初期化し、追加の仕様なしで xmlObject および / または xml テキストを処理する taconite プラグインに脱帽です。以下はすべての魔法を行います-

var tc = new $.taconite(responseXML);

注意してください-これはIE専用です。FFはv.wellを処理するため、上記のコードがFFで実行されるのを防ぐために、追加のIE固有のチェックを維持する必要がありました。

私はIE7、8、および9でテストしました。これにより、同様のIEのジレンマに陥っている人々の労力が節約されることを願っています:)ああ!誰かがより良い解決策を見つけたら、私はすべて耳を傾けます!

ありがとうございました。

于 2013-06-10T07:36:26.437 に答える