私はjquery.FileDownloadプラグインを実装しようとしています。これは、iframe を使用することによって通常は不可能な Ajax のようなファイル ダウンロード エクスペリエンスを可能にします。ただし、このプラグインを使用しているという事実は、私の質問にとって必須ではありません。これは、コードのブレーク ポイントに関する一般的な質問です。
その場合、ここに私のコードがあります:
function generateReport(elementId, data, url) {
var $container = $(elementId);
$.fileDownload(url, {
httpMethod: 'POST',
data: data,
successCallback: function (url) {
$container.toggle('slow');
},
failCallback: function (responseHtml, url) {
$container.find('.error-message').removeClass('hide');
}
});
return false;
}
AJAX 呼び出しが成功すると、successCallback
が呼び出され、すべてが正常に機能します。リクエストでエラーが発生すると、failCallback
が呼び出され、$container 内のどの要素にもアクセスできません。iframe が原因で、アクセシビリティに関して何かが起こっている可能性があることを示す「許可が拒否されました」というエラーが表示されます。
いずれの場合も、この問題をデバッグするときに、ブラウザー デバッガーにブレーク ポイントを配置しました$.fileDownload()
。この行を中断すると、 $container とそれに含まれるすべての要素にアクセスでき、「許可が拒否されました」というエラーは表示されません。url
これは、メソッドに渡されていることに対応するサーバー側のメソッドで任意の時間ブレークする場合にも当てはまります$.fileDownload
。
これにより、IE のこのプラグインにはタイミング/スレッドの問題があると思われました。デバッガーでエラーが発生するのを妨げていた遅延を再現するために、javascript とサーバー側のコードでそれぞれ と を使用しようとしsetTimeout()
ましThread.Sleep()
たが、それでも「許可が拒否されました」というエラーが発生しました。
コードに手動で遅延を追加するのと比較して、デバッガーを中断するのと何が違うのですか?