5

ExtJS 2.2.1を使用して、以下を使用してサーバーからHTMLの一部をロードすることになっているコンテナー要素を取得しました。

autoLoad: { url: 'someurl' }

これはFirefoxで正常に機能しますが、IE7の場合、ext-all-debug.jsの7170行で構文エラーが発生します。

 this.decode = function(json){   
   return eval("(" + json + ')');
 };

私はその関数をこれに変えることによってこれを修正しました:

 this.decode = function(json){   
    return eval('(function(){ return json; })()');  
 };

次に、autoLoadは両方のブラウザーで正常に機能しますが、いくつかの奇妙なバグがあり、さらに、ExtJSライブラリでこれを修正する必要はありません(特に、半分のような縮小されたext-all.jsでは)。 1行にJavascriptのメガバイ)。

私はこのバグについて多くを見つけることができませんでした。

私が試したバリエーション:

// 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にはありません。

更新-ドノバンへの応答:

これが使用される最も単純なケースはこれです:

changeRolesForm = new Ext.Panel({
        height: 600,
        items: [{ autoScroll: true, autoLoad: WMS.Routing.Route("GetRolesList", "User")   + '?userID=' + id}]
    });

ここにはデータストアは含まれていません。応答タイプもtext\htmljsonではなく、であるため、混乱することもありません。そして、前述のように、Firefoxでも問題なく動作し、Firefoxでも同じeval機能を実行しますが、エラーは発生しません。したがって、Firefoxが別の実行パスをたどるわけではなく、同じですが、のエラーはありませんeval

4

5 に答える 5

4

JSONを確認してください。FFはJSONオブジェクトの末尾のコンマを許可しますが、IEは許可しません。例えば

{foo:'bar',baz:'boz',}

FFでは機能しますが、IEでは構文エラーがスローされます。構文エラーが発生しないようにするには、JSONは次のようにする必要があります。

{foo:'bar',baz:'boz'}
于 2009-07-01T17:53:56.150 に答える
2

問題の原因を突き止めましたが、ExtJSでは実際にはそうではありませんでした。アプリケーションには、Ext.Ajax「requestcomplete」イベントをリッスンし、応答がHTMLである場合でも(1つまたは2つの場合のみ)、response.responseTextをjsonにデコードしようとするセクションがありました。IEはこれに面白がっていませんでした。

于 2009-07-01T18:07:29.747 に答える
1

問題が何であるかはわかりませんが、「修正」により、評価されたオブジェクトではなく文字列としてjsonが返されるだけなので、もちろんエラーは発生しません。削除しました。機能。それは同じように単純である可能性があります:

 this.decode = function(json){   
     return json;
 }

一般的に言って、このようなランダムエラーは通常Extのバグを示すものではなく、特にExt.decodeのように一般的に使用される関数ではそうではありません。JSONには、他のブラウザーが無視することをIEが気に入らないことがあるか、おそらく、アプリで予期しないことが起こっているのか、説明からは明らかではないことがあると思います。Firebugでリクエストログを調べて、JSONが実際にどのように見えるかを確認してみましたか?パネルにデータを入力する前に、まずルート呼び出しの結果を変数に取り込んでその内容を確認しようとしましたか?また、Firebugの「すべてのエラーで中断」オプションをtrueに設定してみてください。スタックトレースの最上位にあるExtからランダムな関数を取得する場合、多くの場合、原因は実際にはあなたではなかったアプリケーションコードです。期待。

于 2009-07-01T17:38:53.003 に答える
1

パネルまたは要素に自動ロードする場合は、JSONデコードもプロセスに関与しないでください。UpdateManagerは、htmlの文字列を受け取るExt.Element.update(..)に従うだけです。

あなたの応答がJSONとして解析されると私が考えることができる唯一の理由は、JSONStoreを使用してそれを要求した場合です-何を使用していますか?

次のような簡単なことができるはずです。

var panel = new Ext.Panel({
  autoLoad:'someurl' //これは短縮形ですが、オブジェクト構成を引き続き使用できます
});

また

var element = Ext.get('element id')。update({
  url:'someurl'
});

更新への応答:

WMS.Routing.Route(...)メソッドで何か奇妙なことが起こっていない限り、それは正しいように見えます。私は実際に現在ExtJSアプリケーションに取り組んでいるので、いくつかの異なるサーバー応答をすばやくテストすることができ、問題を再現できませんでした。また、ExtJS 2.2.1のソースを確認しましたが、関連するElement updateとUpdateManagerには、表示されているExt.util.JSON.decode(...)を呼び出すものは何もありません。

アプリケーションの別の部分にある無関係のAJAXリクエストからのものだと想像しています。まだ行っていない場合は、firebug / firebug liteを使用してこれをデバッグします。具体的には、スタックトレースを取得して、問題の原因が実際にこのautoLoadであることを確認してください。

于 2009-06-30T17:01:40.943 に答える
1

私も同じ問題を抱えていました。英語を失礼しました。私はMejicoの出身です。助けていただければ幸いです。ログインするフォームを送信すると、問題が発生しました。次のような失敗の場合、PHPは応答とともにJSONを返します。

$respuesta = "{success: false, msgError: 'El usuario o contrase&ntilde;a son incorrectos'}";

しかし、成功したときは応答を送信しませんでした。真の成功を収めたときは、ExtJSがJSON応答をデコードしようとしていましたが、デコードするものは何もありませんでした。問題…本当の成功、FF、Chrome、Safariの応答を返送するだけで解決しましたが、問題をキャッチできませんでしたが、OperaとIE8は解決しました…誰かを助けてください、さようなら

于 2010-10-18T18:32:27.633 に答える