2009-06-30 11 views
5

では動作しません、私が使用して、サーバーからHTMLの一部をロードすることになっているコンテナの要素を持っている:ExtJSの:AUTOLOADはExtJSの2.2.1を使用してIE

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

autoLoadは両方のブラウザでうまく動作しますが、いくつかの奇妙なバグがあります。また、ExtJSライブラリでこれを修正したくないのは本当ですか?(特に縮小されたext-all.jsでは1行にJavascriptの半メガバイトのように)。

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

バリエーション:<script>タグなし

// With <script> tags around all the HTML 
autoLoad: { url: 'someurl', scripts: true } 
// With <script> tags around all the HTML 
autoLoad: { url: 'someurl', scripts: false } 

そしてその逆。 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のエラーはありません。

+0

「回答」は、エラーがIEでのみ発生するという事実には該当しません。私たちは、Ext 3.3.0においても同じことを経験しています。 –

+0

こんにちはJulian、FireBugを見ると、サーバから返されるものは何ですか? Extがサーバにコールした後、リクエストとレスポンスが投稿された場​​合(ヘッダを含む)に役立つでしょう。 –

+0

チャールズプロキシを使用して、Robが後でIEのデバッグツールがひどいので、情報を取得することをお勧めします –

答えて

2

私は、問題の発生源を設置し、それはExtJSのを確かにありませんでした。応答にHTML(1つまたは2つの場合のみ)であっても、Ext.Ajax 'requestcomplete'イベントを聴いて、response.responseTextをjsonにデコードしようとしたセクションがアプリケーションにありました。 IEはこれで面白かったわけではありません。

1

パネルや要素にオートロードしている場合、JSONデコードはプロセスに関与すべきではありません。 UpdateManagerは、htmlの文字列をとるExt.Element.update(..)へと向かうだけです。

あなたの応答はJSONとして解析されると思う唯一の理由は、JSONStoreを使用してリクエストしている場合です。何を使用していますか?

あなたはこのような単純な何かを行うことができる必要があります:

 
var panel = new Ext.Panel({ 
    autoLoad: 'someurl' // this is the short form, you can still use the object config 
}); 

OR

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

更新に応じ:奇妙な何かが起きていない限り、正しいよう

WMS.Routing.Route(...)メソッドを使用します。私は実際には現在、ExtJSアプリケーションに取り組んでいますので、いくつかの異なるサーバー応答を素早くテストでき、問題を再現できませんでした。 ExtJS 2.2.1のソースも見直しましたが、Ext.util.JSON.decode(...)を呼び出す関連するElementアップデートとUpdateManagerには何も表示されません。

私はあなたのアプリケーションの別の部分で無関係のAJAXリクエストからのその想像しています。もしあなたがまだいないなら、私はfirebug/firebug liteを使ってこれをデバッグするのを助けるでしょう - 特にあなたの問題の原因が本当にこのautoLoadであることを確かめるスタックトレースを得ようとします。

+0

ありがとう、私の更新を見てください。 – JulianR

1

私は問題が何であるかわかりませんが、あなたの "修正"はevalされたオブジェクトではなく単にjsonを文字列として返すことを指摘したかったので、もちろんエラーはありません - 機能を削除しました。それはちょうど、単に次のようになります。

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

は、一般的に言って、このようなランダムエラーは通常Ext.decodeとして一般的に使用される機能で、特に、内線のバグをしませ示すものではありません。私は、JSONには、IEが他のブラウザを無視したり、あなたの説明からはっきりしない、予期せぬ事態があなたのアプリで起こっていることが気に入らないことが気に入っています。 JSONが実際にどのように見えるかをFirebugでリクエストログを調べることを試みましたか?最初に変数へのルート呼び出しの結果を取得しようとしましたが、パネルに移入する前にその内容を検証しましたか?また、Firebugの "break on all errors"オプションをtrueに設定してみてください。スタックトレースの一番上にあるExtからランダムな関数を取得したときは、何回も、期待している。

4

JSONを確認してください。 FFではJSONオブジェクトのコンマを末尾に指定できますが、IEではそうではありません。例えば

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

はFFで動作しますが、IEでは構文エラーが発生します。そこにJSONをする必要があります構文エラーにならないようにするために:

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

私は同じ問題を抱えていましたが、私は英語を覚えています。私は助けてくれることを願っています...私の問題は、フォームにログインするときにトリガーされました。このような:

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

が、私はresposneを送っていなかったときに成功、それが真の成功を持っているだけでなくとき、それは私のJSONレスポンスを解読しようとしていたが、復号化するものは何もありませんでした、その後ExtJSに、I私の場合は問題だと思います... FF、Chrome、Safariの問題は解決しませんでしたが、OperaとIE8はどうしたらいいですか...私は別れを助けることを願っています。

関連する問題