在表单的onsubmit()方法中发送ajax请求是否可行?我一直在尝试,但结果并不稳定,这可能是因为如果浏览器发送我的请求花费的时间比发送原始表单的时间长,那么只要已加载页面的位置发生更改,我的请求就会被丢弃,有时甚至根本没有到达服务器。
基本上,我想添加一个审计日志收集器,用于收集登录事件,我希望将其与现有应用程序连接,而最小干扰。
在表单的onsubmit()方法中发送ajax请求是否可行?我一直在尝试,但结果并不稳定,这可能是因为如果浏览器发送我的请求花费的时间比发送原始表单的时间长,那么只要已加载页面的位置发生更改,我的请求就会被丢弃,有时甚至根本没有到达服务器。
基本上,我想添加一个审计日志收集器,用于收集登录事件,我希望将其与现有应用程序连接,而最小干扰。
这很容易实现。只需在 AJAX 请求完成之前暂停表单提交。
使你的表单的onsubmit
属性调用 AJAX 函数并返回 false(取消表单提交)。当 AJAX 调用完成后,以编程方式提交表单。
例如:
<form name="myform" onsubmit="javascript: startAjax(); return false;">
...
<script type="text/javascript">
function startAjax() {} // Calls ajaxComplete() when finished
function ajaxComplete()
{
document.myform.submit();
}
</script>
将 onsubmit 替换为 onclick 对我来说效果很好,因为 onsubmit 会进入循环。
<form name="myform" onclick="javascript: startAjax(); return false;">
...
<script type="text/javascript">
function startAjax() {} // Calls ajaxComplete() when finished
function ajaxComplete()
{
document.myform.submit();
}
</script>
解决这个问题的另一种方法是将ajax调用设置为同步。
示例:
xmlhttp.open("GET", imageUrlClickStream, false);