我想跟踪用户活动(日志数据)。我在页面上有几个链接,通过特定方式提交表单。问题是:
我找不到合适的方法来处理click事件并以简单的方式将日志插入数据库。
我的代码:
HtmlGenericControl a = new HtmlGenericControl("a");
a.Attributes["onclick"] = "$('#" + frm.ClientID + "').submit();";
a.InnerText = "site " + dt_list.ElementAtOrDefault(0).Field<string>("pro_name").TrimEnd();
inner_li_1.Controls.Add(a);
现在我想处理提交提交的链接的点击事件?!!
答案 0 :(得分:2)
这太多了,它的工作原理如何,我在某些情况下使用它,我不能用其他方式。
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中使用ether一个引用,ether make log on code,ether我在html页面中包含一个空图像,使日志像这样:ASP server stats for html pages
我试着调用ajax,并且正确的方式进行提交,但是它失败了,ajax停止提交。下一个方法是使用超时,调用ajax,并设置超时500ms来进行提交,但我避免了超时,因为ajax调用所花费的时间少于100毫秒。
答案 1 :(得分:1)
@Aristos - 为什么在这个世界中你会在继续事件之前等待执行日志记录的Ajax调用(点击,提交,等等......)对用户体验产生负面影响?日志记录是应用程序的一个非关键部分,用户体验不会根据其结果发生变化。这是一个“发送并忘记”类型的例程。触发Ajax请求,将成功和失败例程留空,然后立即执行$ .ajax()之后的行提交;调用
所以,一些伪代码给你......
function handleClick(e) {
handleLoggingOnClick("something happened here");
myForm.submit();
}
function handleLoggingOnClick(message) {
$.ajax({url:"logging.do", data:"message="+message});
}