7

問題:

私が構築しているサイトでは、2 つの JQuery ajax ロング ポーリング呼び出しが常に保留になっています。リンクが押されたときにユーザーに [名前を付けて保存] ボックスが表示されるように、ファイルのダウンロード機能を追加しようとしています。このファイルのダウンロードは正常に機能しています。問題は、リンクが押されたときに 2 つの ajax 呼び出しがキャンセルされることです。

私は ajax 呼び出しをキャンセルしないようにするか、すぐに ajax 呼び出しを設定できるようにしようとしています。

リンクのコードは次のとおりです。

HTML:

<a href="/test" id="testfile">Tasks</a>

JS:

$(document).on('click',"#testfile",function(event){
    event.preventDefault();
    var href=$(this).attr('href');
    window.location.href = href;
    updater();                               /* AJAX CALL #1 */
    notifier();                              /* AJAX CALL #2 */
});

私が試したこと:

上記のコードでは、ダウンロードの開始後に 2 つの ajax 呼び出しを呼び出そうとしました。これは機能していません。ダウンロードが完了した後に呼び出しが開始されるように少し遅延すると、機能しますが、ファイルが大きくなる可能性があるため、受信に不明な時間がかかるため、これはもちろん悪い解決策です.

なぜajax呼び出しがキャンセルされているのか、本当に混乱していますか? これは、リンクを押したときにページがアンロードされているためですか?

スレッドが 1 つの開発サーバーでしか実行していないため、リンクをたどった直後にセットアップしようとしている新しい ajax 呼び出しは、サーバーがビジー状態であるために失敗する可能性があります。


解決済み:

サイトの下部に非表示の iframe を追加し、それをリンクでターゲットにしました。また、ajax 呼び出しがキャンセルされなくなったため、JS コードも削除しました。

コードは次のようになります。

HTML:

<a href="/test" target="filetargetframe"  id="testfile">Tasks</a>

********

<iframe name="filetargetframe" style="display:none"></iframe>
4

1 に答える 1

5

yoavmatchulsky からの回答を使用して、問題は解決されました。

サイトの下部に非表示の iframe を追加し、それをリンクでターゲットにしました。また、ajax 呼び出しがキャンセルされなくなったため、JS コードも削除しました。

コードは次のようになります。

HTML:

<a href="/test" target="filetargetframe"  id="testfile">Tasks</a>

********

<iframe name="filetargetframe" style="display:none"></iframe>
于 2014-05-22T09:22:15.550 に答える