我有以下使用 jquery 1.9.1 的 javascript 代码:
(function ($) {
$(function () {
eventTracking();
});
function eventTracking() {
$("[data-formtracking]").bind('submit', function (e) {
e.preventDefault();
var eventName = $(this).data("formtracking");
rt.trackEvent(eventName);
$(this).unbind('submit').submit();
});
}})(jQuery);
现在,当我提交表单时,它应该对数据库进行更新,然后按照表单上的操作,基本上将我们重定向到另一个页面。
在 Chrome/IE 中,rt.trackEvent 成功触发,我被重定向到另一个站点。在 Firefox 中,我被重定向到另一个站点,但没有数据库条目。
如果我在每个语句之间添加 console.log,我可以看到它命中了所有的日志语句。
所以在这一点上......我很困惑。我试过从绑定切换到开/关。我试过: $('input[type=submit]', this).click() 基于另一个stackoverflow页面上的传递评论。
一些注意事项: * rt 在外部文件中。我已经检查过它确实存在 * 如果我删除了 unbind.submit,那么 rt.trackEvent 可以正常工作,除了页面没有重定向(显然)。* 我已将 unbind.submit() 更改为其他变体,但在提交之前我必须单击该按钮两次。
想法?
更新
e.preventDefault() 和稍后提交的原因是表单提交发生得太快。该页面将在 rt.trackEvent 正常工作之前重定向。所以我需要通过添加一个 setTimeout($(this).unbind('submit').submit(), 2000);
我删除了它以简化代码,但归根结底,它对于代码的工作非常重要。
更新 2 这是被调用的 json:
options = $.extend({ success: $.noop, error: $.noop, urlBuilder: getNoCookieRequestURL, eventName: null }, options);
options.url = options.urlBuilder(options.url, options.siteId, options.eventName);
$.getJSON(options.url, function (jsonp) {
options.success(jsonp);
}).fail(function () {
options.error();
});
更新 3
将 getJson 更改为:
options = $.extend({ success: $.noop, error: $.noop, urlBuilder: getNoCookieRequestURL, eventName: null }, options);
options.url = options.urlBuilder(options.url, options.siteId, options.eventName);
$.ajax({
url: options.url,
dataType: 'json',
async: false,
success: function (jsonp) {
options.success(jsonp);
},
error: function() {
options.error();
}
});
我似乎仍然遇到速度问题。当我在 Chrome 中逐步执行代码时,代码可以工作,但是当我运行它时,数据库没有正确更新。