1

unload イベントで ajax-callsを約 1 年間実行しました。FF と IE では一般的に機能しますが、100% ではなく、いつ失敗したかはわかりません。bodytag に
onunload="...."
と書き込んでイベントを登録します。アンロード イベントは、アンロードしたばかりのページの div タグにも書き込もうとしていたため、FF4 でエラー メッセージが表示されました。ターゲット div の id が「ダミー」の場合、ajax ルーチンが何も書き込まないようにすることでこれを修正しました。私は AJAX の専門家ではありませんが、次のコードは機能しました : /ajax_ex.php (リンクはテキストページです)
(次の引数で ajaxfunction2 を呼び出します: ファイル名、PHP の queryString、更新中にターゲット div に表示する文字列、ターゲット div の名前)

FF エラー コンソールにエラー メッセージは表示されず、IE9 は動作します。FFでも動作させる方法はありますか?? FF4を始めたばかりですが、FF3に比べると上手くいかない印象です。

ありがとう。

(私は旅行中であり、すぐに返信する可能性はありませんが、提案を本当に感謝しており、やがて返信します)

編集:これを追加したほうがよい: アンロード時に行うAJAX呼び出しは、一部のデータ(ユーザーがページに滞在した時間)のみをPHP-MySQLサーバーに送信します

4

2 に答える 2

1

ブラウザの変更を自分で追跡する代わりに、jQuery を使用することをお勧めします。

解決策:
ここで動作するサンプルを見つけてください: http://jsfiddle.net/ezmilhouse/4PMcc/1/

内部リンクが相対的に設定されていると仮定すると、外部リンクは「http」で始まるように設定されます。

<a href="http://google.com">Leave ...</a>
<a href="/home.html">Stay ...</a>

jQuery イベントを介して「a」タグをハイジャックし、ユーザーに離脱の確認を求めることができます (外部リンクの場合)。「OK」の場合、「onleave」ajax 呼び出し (async=true) を開始し、ユーザーを外部リンクにリダイレクトします。

$('a').live('click', function(event){

    // cache link
    var link = $(this).attr('href');

    // check if external link (assuming that internal links are relative)
    if (link.substr(0,4) === "http") {

        // prevent default a tag event
        event.preventDefault();

        // popup confirm message
        var reply = confirm('Do you really want to leave?');
        if (reply) {

            var url = 'http:mydomain.com/ajax.php';
            var data = {'foo': 'bar', 'fee':'bo'};

            // kick off your 'onleave' ajax call
            // forced to be synchronous
            $.ajax({ 
                type: "POST",
                async: false,
                url: url,
                data: data,
                success: function( data ) { 

                   // ok case: leave page, cached link
                   window.location.href = link;

                }
            });

        }

        return false;

    }

});
于 2011-04-23T08:21:24.223 に答える
1

ここで何が起こっているのかはわかりませんが、Firefox 4 ではアンロードの仕組みに大きな変更が加えられました: たとえば、リンク クリック イベント中に alert() を実行すると、ページがフリーズしなくなり、新しいとにかく場所。多分これは似たようなものです。

ただし、Ajax 呼び出しがいずれのブラウザーでも同期していない場合、Ajax 呼び出しが終了することは保証されません。ページが閉じられるまで、要求が応答で返される場合と返されない場合があります。これが機能するかどうかは、偶然とユーザーのネットワーク速度にかかっています。

ここで概説されているように、最初に同期要求を使用してみてください: How does jQuery's synchronous AJAX request work?

これにより、通常、リクエストが返されることが保証されます。ただし、慎重に使用してください。ページのアンロード時のブロック動作は、ユーザーにとって非常に煩わしく、ブラウザがフリーズすることさえあります

于 2011-04-23T08:20:25.367 に答える