6

クリック トラッキング AJAX 関数 (ページで aWebMethodを呼び出す.aspx) があり、ユーザーがリンクをクリックしたときにそれを呼び出す必要があります。

残念ながら、window.location = "newUrl"ページを変更するために使用しているため、AJAX 呼び出しが失敗するようです。これを回避する方法はありますか?

AJAX 呼び出しから情報を取得する必要はありませんWebMethod。 が呼び出されていることを確認するだけで済みます。

success()または呼び出しでリダイレクトするだけでよいことはわかっていますが、メソッドが実行さfailure()れるまで待つ必要があり、 ~ . これはプロジェクト仕様の合意では受け入れられないため、実行可能な解決策ではありません。clickTracking()1s

4

3 に答える 3

3

AJAX を使用する代わりに、クリックを記録locationし、新しい URL にリダイレクトするヘッダーを送信する ASPX ページにユーザーを送信してみませんか? たとえば、リンクをクリックすると、次のようになります。

window.location = "/redirect.aspx?track=true&url=" + encodeURIComponent(newUrl);

redirect.aspxその後、トラッキングと新しい URL へのリダイレクトの両方を処理します。これは、AJAX 要求が完了するのを待たずにユーザーを送信する唯一の方法です。

関連項目:ユーザーを別のページにリダイレクトする (MSDN)

この方法は、多くのサイトで毎日見られることに注意してください。最も一般的には、それらは広告で見つかります。AdSense 広告リンクは次のようになります。

http://www.google.com/aclk
    ?sa=L&ai=C6DnFKnl1S5zhKoSBjAeqyKzKBPOD_2ehlIXfD9WsvQsQAVDQzK______
    8BYLvOuYPQCsgBAaoEGU_Q8k4OJin9jMDXAD6KQ_2Dsv7xyokLxRY
    &num=1&ggladgrp=13269254452699041863&gglcreat=8511532373602616220
    &sig=AGiWqtwzFm2sTimBuQpkD5kazyRNkkqH3w
    &q=http://www.amazon.co.uk/s/%3Fie%3DUTF8%26keywords%3Dhello%2Bworld

とにかく、(私はそれを少しノックダウンしました)。クリックするとhttp://www.google.com/aclkに移動し、クリックを追跡した後、エンド サイトにリダイレクトされます。

于 2010-02-12T15:42:26.643 に答える
2

WebMethod が呼び出されていることを確認する必要があります。

上記が本当に重要な場合は、次のことができます。

function onLinkClicked() {
    $.ajax({
        url: 'WebMethod.aspx',
        success: function(data) {
            window.location = "newUrl";
        }
    });
}

ページがリダイレクトされてから、ある程度の待ち時間が発生します。これは、アプリケーションと、ユーザーからホストへの平均レイテンシーによって、許容される場合と許容されない場合があります。


編集:

以下の新しいコメントに加えて、残念ながら、このwindow.location変更により AJAX リクエストが中断されます。

内部リンクの場合:ユーザーがハイパーリンクをクリックしたときではなく、新しいページに到達したときにすぐにリンクを追跡することができます。

外部リンクの場合: Andy E が別の回答で提案したように、サーバー側のリダイレクト メソッドを使用します。

于 2010-02-12T15:39:31.557 に答える
0

ラッパーを使用し<iframe>てページをラップします。次に、AJAX リクエストがある場合は、リクエストをラッパーに渡し、<iframe>. これを行うと、アプリの応答性を維持しながら、完全に非同期のリクエストを行うことができます。

確かに、アドレス バーを変更して効果的に SEO を無効にしているわけではありませんが、それは悪いアーキテクチャを使用することとのトレードオフです。クリック トラッキング機能に約 1 秒かかるという事実は、単に恐ろしいことです。おそらく、サーバー上の非同期スレッドで開始し、別のスレッド ( System.Threading) を使用してクライアントにデータを提供する必要があります。それはあなたが経験している問題を軽減するでしょう。

それ以外の場合は、非同期信頼できる、または「一緒にハッキングされていない」を持つことができます。任意の 2 つを選択します。

編集

残念ながら、AJAX リクエストをポップアップとして実行することもできます。

window.open(url,'ajax','height=0,width=0');

それはまだ良い考えではありませんが、うまくいくでしょう。

于 2010-02-12T16:14:39.413 に答える