0

私は完全に機能するバックボーン js アプリケーションを持っています。コントローラーでは、連鎖した when.apply 関数呼び出しを使用して、API からモデルを取得します。例えば、

          $.when.apply($, [<<array of deferred async calls>>]).done(function () {
              <<Code to be executed after all deferred calls complete>>
              });

このコードは、最新の firefox、chrome、および IE10 ブラウザーでは機能しますが、IE9 では機能しません。IE9 はエラーをスローしませんでしたが、ネットワーク タブでモデル データをロードするための呼び出しが行われていません。したがって、呼び出しが完了した後に実行されるコードもヒットしません。

この問題を検索すると、この投稿に遭遇しました。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply 投稿には、

注: Chrome 14 や Internet Explorer 9 を含むほとんどのブラウザーは、依然として配列のようなオブジェクトを受け入れず、例外をスローします。

多くの既存のコードをオーバーホールせずにこれを回避する方法はありますか?

編集: 以下の @Beetroot のコメントの後、バックボーンのフェッチが原因のようで、これは when.apply 内で使用されます。

      r = { method: 'get', body: { userId: loggedInUser } };

      $.when.apply($, [employee.fetch(r), department.fetch(r)]).done(function () {
          <<Code to be executed after all deferred calls complete>>
          });

繰り返しますが、この問題を調査すると、SO にBackbone fetch() fails for IEのような投稿があり、IE9 で動作するようにフェッチ関数を変更することを提案しています。前述のように、現在、アプリケーションには数百のフェッチがあり、これらのフェッチを書き直す必要がある場合、大幅に後退します。この問題を解決する他の方法はありますか?

4

1 に答える 1

1

最後に、MS サポートの誰かと話をしたところ、IE 9 でこの回避策を教えてくれました。

  1. IE9 を開き、[設定] -> [インターネット オプション] に移動します</li>
  2. 「セキュリティ」タブをクリックします。「インターネット」を選択します。
  3. 「レベルのカスタマイズ」をクリックします。
  4. [ドメイン間でデータ ソースにアクセスする] という設定を見つけて、[有効にする] を選択します。
  5. [OK] をクリックします。アプリを更新して、もう一度ログインしてみてください。

これはIE9で動作します。IE10 以降では、その設定が無効になっていても、呼び出しは引き続き機能します。バックボーン同期を介して行われる基本的な ajax 呼び出しと関係があると推測しています。これは、最新のすべてのブラウザーで XMLHTTPRequest を使用し、IE9 以下ではそれを行うことができません。

于 2013-11-11T08:41:06.473 に答える