ExtJSの:AUTOLOADはIEでは動作しません。
-
21-08-2019 - |
質問
のExtJS 2.2.1を使用して、私が使用して、サーバーからHTMLの一部をロードすることになっているコンテナの要素を持ってます:
autoLoad: { url: 'someurl' }
このFirefoxで正常に動作しますが、IE7のために、これはライン7170でのEXT-すべて-debug.jsとするのが最良で構文エラーになります:
this.decode = function(json){
return eval("(" + json + ')');
};
私はこれにその機能を回すことによって、これを固定します:
this.decode = function(json){
return eval('(function(){ return json; })()');
};
次に、自動ロードは、両方のブラウザでも動作しますが、その後、いくつかの奇妙なバグがありますし、それは特に縮小さEXT-all.jsに(どのunmaintainableになるように加えて、あなたは本当にExtJSのライブラリにこの問題を修正する必要はありません)単一ライン上のJavascriptの半分megabyeのようなものです。
私はこのバグについて多くを見つけることができませんでした。
私が試したバリエーションます:
// With <script> tags around all the HTML
autoLoad: { url: 'someurl', scripts: true }
// With <script> tags around all the HTML
autoLoad: { url: 'someurl', scripts: false }
<script>
タグなしそしてその逆。そこHTML内の任意のJavascriptのいずれかではなく、最終的に我々が返されたHTML内でJavascriptを使用しますので、それは、可能なはずです。
でも、できるだけ簡単なHTMLと、エラーが同じであるため、問題はHTMLではありません。
UPDATE - ドノバンへの対応:
これを使用する最も簡単な場合は、この一つである:
changeRolesForm = new Ext.Panel({
height: 600,
items: [{ autoScroll: true, autoLoad: WMS.Routing.Route("GetRolesList", "User") + '?userID=' + id}]
});
ここに関与なしデータストアはありません。それはどちらかそれを混乱することはできませんので、応答型は、またtext\html
ではなく、JSONです。そして、として、それはFirefoxでうまく働いている、とFirefoxで、それはまた同じeval
機能を実行するが、エラーなし、と述べました。だから、Firefoxは、実行の別のパスを次のように、それは同じだが、eval
上の誤りがないわけではないのです。
解決 2
私は、問題の発生源を設置し、それはExtJSのを確かにありませんでした。応答は、(それが1つまたは2つのケースである)HTMLであっても、Ext.Ajax
「requestcomplete」イベントを聞き、JSONにresponse.responseTextを復号化しようとしたアプリケーションでのセクションがありました。 IEはこれで面白がっていませんでした。
他のヒント
あなたのJSONを確認してください。 FF IEはそうではないJSONオブジェクトにコンマを末尾許可します。例えばます。
{foo:'bar',baz:'boz',}
FFで動作しますが、IEでそれが構文エラーをスローしていました。ためにはそこにJSONをする必要があります構文エラーではないと。
{foo:'bar',baz:'boz'}
JSONのデコードにもプロセスに関与すべきではありません。 UpdateManagerはちょうどHTMLの文字列を受け取りExt.Element.update(..)に延期ます。
あなたがそれを要求するJSONStoreを使用していた場合は、私はあなたの応答はJSONとして解析されることを考えることができる唯一の理由は? - あなたが使用している
あなたはこのような単純な何かを行うことができるはずます:
var panel = new Ext.Panel({ autoLoad: 'someurl' // this is the short form, you can still use the object config });
または
var element = Ext.get('element id').update({ url: 'someurl' });
更新に応じます:
正しい限り、奇妙な何かがWMS.Routing.Route(...)メソッドで起きていないように見えること。私は実際には現在、自分ので、私はすぐにいくつかの異なるサーバーの応答をテストすることができたし、あなたの問題を再現することができませんでしたExtJSのアプリケーションに取り組んでいます。また、私はExtJSの2.2.1のソースでrelooked、まだあなたが見ているExt.util.JSON.decode(...)への呼び出しになるだろう、関連する要素の更新とUpdateManagerで何も見えませんしました。
私は、そのアプリケーションの別の部分で無関係なAJAXリクエストから想像しています。あなたはまだしていない場合は、私はこれをデバッグするため放火犯/放火犯のライトを使用する - 特にあなたの問題の原因は本当にこの自動ロードであることを確認するためにスタックトレースを取得しよう。
私は私の英語を言い訳、同じ問題を抱えていた、私はMejicoから来たんだ、私は私がログインするフォームを送信すると...私の問題が引き起こされた役立つことを願って、私のPHPのような障害が発生した場合の応答とJSONを返しますこの:
$respuesta = "{success: false, msgError: 'El usuario o contraseña son incorrectos'}";
しかし、それは真の成功を持っているとき成功は、よく、その後、ExtJSにそれは私のJSONレスポンスを解読しようとしていたが、復号化するものは何もありませんでした、私は私の場合には、それだったと思うとき、私はresposneを送っていませんでした再び、問題は...私は本当の大成功、FF、クローム、サファリ、の応答を返送解かは、問題をキャッチいけないが、オペラとIE8は...私は私が誰かを助けることを願っていない、さようなら。
私は問題が何であるか知らないが、私はあなたの「修正」ことを指摘したかったエラーはもうありませんもちろんのように、それは単に、代わりにeval'dオブジェクトの文字列としてJSONを返します - - あなたは機能を削除しました。それはちょうど、単に可能性があります:
this.decode = function(json){
return json;
}
このような一般的に言って、ランダムエラーは通常、特に機能に一般的Ext.decodeとして使用されていない、内線のバグを示すものではありません。私はどちらかのIEは、他のブラウザでは無視する、またはそれ以上の可能性が好きではありませんJSONで何かがあることを推測、あなたの説明から明らかにされていませんあなたのアプリで起こって予期しない何かがあります。あなたはJSONが実際にどのように見えるかを確認するためにFirebugの中で、あなたの要求ログを検査しようとしたことがありますか?あなたは最初のパネルを投入する前にその内容を確認するために、変数にあなたのルート呼び出しの結果を取得しようとしたことがありますか?また、trueにFirebugのではオプション「すべてのエラーで中断」を設定してみてください - 多くの時間を、あなたのスタックトレースの先頭に内線からランダム関数を得るとき、犯人はあなたがいなかったいくつかのアプリケーション・コードは、実際にあります期待してます。