gpt4 book ai didi

javascript - jquery ajax 发布被取消

转载 作者:数据小太阳 更新时间:2023-10-29 05:30:32 25 4
gpt4 key购买 nike

我想跟踪一组页面上的一组 UI 组件上的鼠标单击事件。为此,我使用以下 jquery/ajax 调用(删除了 u):

1.Ajax 调用将添加点击记录。

myClickLogger = { 
endpoint: '/path/to/my/logging/endpoint.html',
logClickEvent: function(clickCode) {
$.ajax({
'type': 'POST',
'url': this.endpoint,
'async': true,
'cache': false,
'global': false,
'data': {
'clickCode':clickCode
},
'error': function(xhr,status,err){
alert("DEBUG: status"+status+" \nError:"+err);
},
'success': function(data){
if(data.status!=200){
alert("Error occured!");
}
}
});
}
};

2.JQuery 点击事件将调用 ajax 记录器(clickCode 是点击按钮/图像的标识符):

$(document).ready(function() {
$(".myClickEvent[clickName]").click(function() {
var clickCode = $(this).attr("clickName");
myClickLogger.logClickEvent(clickCode);
});
});

只要被跟踪的按钮点击进入新页面,浏览器就会“取消”上述 ajax 调用 (1.)。

如果我将 'aysnc' 更改为 'false',则 ajax 调用成功。

此外,点击事件不会成功进入新页面。只有转到新页面的点击事件被取消。

我不想让调用同步。

任何想法,可能是什么问题?如何保证点击事件跳转到新页面时之前的异步调用结束?

最佳答案

因为它是异步的,代码将在日志记录发生之前完成。您要做的是将回调传递到异步调用中。这将保留异步属性,但仍然允许您离开。像这样:

  logClickEvent: function(clickCode, callback) {
$.ajax({
'type': 'POST',
'url': this.endpoint,
'async': true,
'cache': false,
'global': false,
'data': {
'clickCode':clickCode
},
'error': function(xhr,status,err){
alert("DEBUG: status"+status+" \nError:"+err);
},
'success': function(data){
if(data.status!=200){
alert("Error occured!");
} else {
callback();
}
}
});
}

$(document).ready(function() {
$(".myClickEvent[clickName]").click(function(e) {
e.preventDefault(); // This will prevent the link from actually leaving right away
var clickCode = $(this).attr("clickName");
var href = $(this).attr('href');
myClickLogger.logClickEvent(clickCode, function(href){
if (href)
window.location = href;
});
});
});

您可能希望在没有必要时修改任何未离开页面的链接的回调。

关于javascript - jquery ajax 发布被取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10990607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com