0

私はいくつかのウェブアプリを持っています。デスクトップベースです。データを保存する前にアクションがキャンセルされるという問題があります。javascriptでunloadイベントを使用して、データをmixpanelに送信しています(ajax呼び出しのみ)。問題は、このリクエストが時々「キャンセル」されると私が信じていることです。

コールバックに到達するまでページが変更されないようにする方法はありますか?同期的に電話をかけることができなければ、答えはノーだと思います。私はmixpanelでその能力を持っているとは思いません。

私は現在、mootoolsでunloadイベントを使用しています。おそらくアンロードする前に使用する必要がありますか?アンロードに完了したことを通知する方法はありますか?

4

2 に答える 2

1

簡単な答えはノーです。ここでは、同期ajaxが唯一の信頼できるオプションのように見えます。

クライアント側のコードを制御している場合は、同期させるのは簡単です。オプションを追加するだけasync: falseです。Requestサーバーは気にしません。

非同期ajaxの記述に慣れている私たちにとっての潜在的な落とし穴の1つは、Request.send()呼び出し後はonCompleteハンドラーが完了するまで何も実行されないということです。つまり、「お待ちください...」などの詳細をコードの最初に表示する必要があります。非同期リクエストの場合、順序は明らかに重要ではなく、最初にリクエストを送信するのが一般的です。

に関してはbeforeunload、ここではおそらく役に立たないでしょう。の値はbeforeunload、ユーザーが差し迫ったページの読み込みをキャンセルできるようにすることです。この機能が必要ない場合は、を使用してunloadください。

于 2012-08-18T03:34:29.247 に答える
1

を使用した新しいアプローチがありnavigator.sendBeaconます。以下は、ページから移動するためのミックスパネルイベントを設定します。

var props = {};
document.addEventListener('visibilitychange', function() {
    if (document.visibilityState === 'hidden') {
        mixpanel.track('Page closed', props, {transport: 'sendBeacon'});
    }
});

{transport: 'sendBeacon'}このgithubの問題で説明されているように、 2020年1月の時点でmixpaneljsで利用できるものです。その議論には(実装前に提案された)スニペットがありますが、「アンロード」ではなく「アンロード前」と言うべきだと思います。しかし、私は見つけました...

navigator.sendbeaconのdeveloper.mozilla.orgドキュメントには、この追跡目的で「unload」または「beforeunload」の代わりに「visibilitychange」を使用することをアドバイスする非常に関連性の高いセクションが含まれています。このイベントは、ユーザーが別のタブに切り替えた場合でも発生します(ページを正確に「閉じる」わけではありません。予想どおりではない可能性があります)が、モバイルブラウザーユーザーが別のアプリを開いた場合にも発生します(おそらく予想どおりですモバイルでページを「閉じる」主な方法)。

于 2021-07-22T22:57:16.483 に答える