2

ユーザーがフォームのいくつかのオプションを選択できるページがあります。フォーム送信イベントは、このデータを.AJAXを介してPHPページに送信し、サーバーにファイルを書き込みます。PHPページはファイル名を返し、jqueryを使用します。ダウンロードして、ファイルを保存するようにユーザーに促します。

これはFFとChromeで完璧に機能しますが、IEで恐ろしい黄色の情報バーを受け取ります。さらに悪いことに、ユーザーが情報バーから[とにかくダウンロード]を選択すると、実際にユーザーにファイルのダウンロードを求めることなく、ページが更新されます。

Stackoverflowで検索を行いましたが、この質問に回答されていないようです。

4

1 に答える 1

2

これは、ユーザーが開始したブラウザー イベントとプログラムによって開始されたブラウザー イベントの定義が異なるためです。一般に、そのイベントをアクションにバインドする jQuery の結果として発生するイベントは、プログラムによって開始されると見なされます。

$("#myElement").click(
    function() {
        $.ajax(...);
    }
);

.click()jQueryイベントをクリック可能なリンクなどにバインドして新しいタブを開こうとすると、同じ症状が見られます.

問題の回避策として、AJAX 呼び出しが行われる JS 関数を呼び出す HTML コードでイベント属性を使用することが考えられます。

<script type="text/javascript"> 

function submitAndDownload() {
    $.ajax(...); //form submit
    $.ajax(...); //download file
}

</script>

<button onClick="submitAndDownload();"></button>

このようにして、ブラウザはイベントをユーザーの開始と見なします。もちろん、フォーム提出ajaxリクエストのボディ内にダウンロードajaxリクエストをネストすることができます。それはあなたがする必要があることによって異なります。ただし、ミックスに他のAJAX呼び出しがある場合、他の内側にネストされている場合、ソケットの閉鎖に何らかの矛盾が見られる場合があります。

于 2012-07-26T23:46:39.847 に答える