これは多すぎますが、どのように機能しても、他の方法ではできない場合に使用します。
JavaScript の呼び出しです。最初にログを呼び出してから、送信を続けます。また、クリックすると待機メッセージが表示されますが、イベントの発生が速すぎて、ユーザーがそれを待機していることを理解していませんでした。また、単純な JavaScript を使用して、アクションのログが二重にならないように注意します。イベントでこの関数を呼び出しますonclick
。
var confirmSubmited = false;
function SubmitWithLog(me)
{
// to avoid many clicks...
if(confirmSubmited)
return false;
confirmSubmited=true;
jQuery.ajax({
url: "/LogAction.ashx",
type: "GET",
timeout: 3000,
async: true, // you can try and async:false - maybe is better for you
data: action=4, // here you send the log informations
cache: false,
success: function(html) {
jQuery("#FormID").submit();
},
error: function(responseText, textStatus, XMLHttpRequest) {
jQuery("#FormID").submit();
}
});
return false;
}
ハンドラーは次のとおりです
public class LogAction : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// log here what you wish
// end up with no content
context.Response.TrySkipIisCustomErrors = true;
context.Response.Status = "204 No Content";
context.Response.StatusCode = 204;
}
}
これはユーザー アクションをログに記録する良い方法ではありませんが、他の方法では実行できない場合の方法であることを明確にしたいと思います。ユーザーが送信してサイトを離れ、別のサイトに移動するときにのみ使用し、このアクションを記述するために使用します。
他のすべての場合、私はエーテルをURLの参照として使用し、エーテルは背後のコードでログを作成し、エーテルはhtmlページに空の画像を含めてログを次のようにします: HTMLページのASPサーバー統計
私はajaxを呼び出そうとしましたが、正しい方法で送信を行いましたが、失敗し、送信によってajaxが停止しました。次の方法は、タイムアウトを使用して ajax を呼び出し、タイムアウトを 500 ミリ秒に設定して送信することでしたが、私が行ったように ajax 呼び出しにかかる時間は 100 ミリ秒未満であるため、タイムアウトを回避します。