javascript登录表单提交

javascript logging on form submit

本文关键字:表单提交 登录 javascript      更新时间:2023-09-26

在我维护/开发的几个网站中,我们使用worldpay作为支付网关。我们有人遇到了一些奇怪的问题。所以我试着记录一些东西,但我实现的记录不太有效。

用户遇到的问题是,他们应该被重定向到worldpay网站,所以magento插件生成了一个带有隐藏字段的简单表单。然后在页面加载事件中提交表单。表单操作url设置为worldpay url。所以这基本上是一个邮寄请求,订单信息被发送到worldpay。

现在,对于一些人来说,这种情况每天都会发生,worldpay网关永远不会加载。他们被卡在一个隐藏表单的页面上,上面写着"请等待我们重定向您"。我们让人们等了几分钟才真正被重定向。

我决定每当用户花在表单上的时间超过3秒时,就开始记录表单中的各种内容

<body onload="javascript:document.worldpay_checkout.submit()">

然后我有这些线路

function timerFunction(){
    var dataObj = {};
    for (var i = document.worldpay_checkout.elements.length - 1; i >= 0; i--){
        dataObj[document.worldpay_checkout.elements[i].name] = document.worldpay_checkout.elements[i].value;
    }
    dataObj["BrowserCodeName="] = navigator.appCodeName;
    dataObj["BrowserName="] = navigator.appName;
    dataObj["BrowserVersion="] = navigator.appVersion;
    dataObj["CookiesEnabled="] = navigator.cookieEnabled;
    dataObj["Platform="] = navigator.platform;
    dataObj["UserAgentHeader="] = navigator.userAgent;
    $.post("/worldpaylog/worldpaylog.php", dataObj, function(data) {
        document.worldpay_checkout.submit();
        intervalId = self.setInterval('timerFunction()',5000);
    });
    self.clearInterval(intervalId); 
}
var intervalId = self.setInterval('timerFunction()',3000);

我尝试做的是获取表单元素和一些浏览器信息,并在超过3秒时通过发出ajax post请求将其记录在服务器上。然后我重新提交了表格。它看起来很直接,但仍然有很多人。他们没有获得worldpay,也没有被脚本记录。可能是在某些浏览器上,javascript在提交表单后不可靠吗?在浏览器开始期望加载新页面或其他什么之前。

此外,还有一个缩小的jquery框架,它只包含ajax函数在该页面上工作所需的组件。出于绝望,我在github上发现了它,当时我认为我之前写的东西并不能在所有浏览器上运行。但一切都一样。

有人暗示我应该在这里做什么吗?也许是关于记录这些数据的不同方法的想法?

错误的最可能原因是存在一个JavaScript错误,该错误会杀死脚本,因此您无法进行重定向和日志记录。注意jQueryajax请求错误是否会被毫无问题地吞噬,并确保检查您的代码是否能在尽可能多的浏览器中工作。

您可以通过向window.onerror注册事件处理程序来暂时尝试记录页面上引发的错误。并非所有浏览器都支持此事件或会在所有错误时触发此事件,但如果您无法通过自己的测试自行识别客户端上的JavaScript错误,则它提供了一个起点来探测这些错误。