Javascript 函数内部的AJAX响应缓存/onclick事件
我使用AJAX执行一些服务器端操作,并刷新页面内的表,而无需重新加载页面本身。乍一看,一切都很好。但我用PHP编写了一个函数来发送电子邮件并通过AJAX执行。当我第二次启动此操作时,会触发旧的响应 到底发生了什么:Javascript 函数内部的AJAX响应缓存/onclick事件,javascript,php,jquery,ajax,caching,Javascript,Php,Jquery,Ajax,Caching,我使用AJAX执行一些服务器端操作,并刷新页面内的表,而无需重新加载页面本身。乍一看,一切都很好。但我用PHP编写了一个函数来发送电子邮件并通过AJAX执行。当我第二次启动此操作时,会触发旧的响应 到底发生了什么: 我正在点击一个按钮来执行“Sendmail操作” 模态询问我是否要执行该操作,我单击“是” 执行一个PHP脚本并发送电子邮件 PHP脚本完成后(~2s)模式关闭 该表(包含电子邮件等)将被刷新并更新状态 接下来会发生什么: 我点击一个按钮来执行“Sendmail操作”相同 或我
- 我正在点击一个按钮来执行“Sendmail操作”
- 模态询问我是否要执行该操作,我单击“是”
- 执行一个PHP脚本并发送电子邮件
- PHP脚本完成后(~2s)模式关闭
- 该表(包含电子邮件等)将被刷新并更新状态
- 我点击一个按钮来执行“Sendmail操作”相同 或我表格中的其他条目
- 模态询问我是否要执行该操作,我单击“是”
- 该事件触发两次/4xAjax请求,而不是2次(我可以在Chrome控制台中看到)
- 模式关闭,发送2封邮件
- 用JSHint检查我的JS
- 检查我的PHP代码(apacheerror.log中没有错误)
- 重新设计了PHP脚本(Sendmail),现在AJAX执行一个函数
- 尝试了不同的浏览器
- 停用的AJAX缓存
- 使用Apache完全停用缓存(正确的头)
- 在我的php.ini中停用会话缓存(我不使用会话)
- 在PHP中取消设置所有变量
- 已清除所有浏览器的缓存
- 检查所有标题
- 花了几个小时寻找解决办法
- jQuery 2.1.4
- PHP5.4
- Apache2.2
我找不到解决问题的方法,可能是因为我正在将内容动态添加到表中。我过去也遇到过同样的问题,我认为模式(也是动态的)会触发两次单击“是”按钮。您可以将ajax单击处理程序置于该函数之外:
$(document).on('click', '.email-resend, .email-send, .show-doc, .show-acc, .more-acc, .no, .yes, .termin', function(){
$.fn.doAction(classname, comEntry);
});
正如您所提到的,您已将其放置在函数中。相反,你应该把它放在外面:
$(document).on('click', '.bt-ok', function(){
$.ajax({
....
});
});
通过@pandora:编辑,或者使用第二个函数(在我的例子中)如下:
$(document).on('click', '.bt-ok', function(){
$.fn.sendRequest($('#modal').attr('data-1'), $('#modal').attr('data-2'));
});
然后我可以像这样调用函数并执行AJAX:
$.fn.sendRequest = function(data1, data2) {
$.ajax({
url: 'target.php',
cache: false,
data: { gimme1 : data1, gimme2 : data2 },
success: function(response) {
// Show Error
if(response.length > 0){
alert(response);
}
// Reload Content
$.fn.Reload('','');
// Close Modal
$('#modal').css({'display' : 'none'});
}
});
};
如何绑定单击事件以发送电子邮件?如果您在函数中执行了此操作,则每次调用该函数时,它都会注册一个新事件并将其加倍。@Jai正在执行文档中的操作,准备这样打开模式(缩写)
$(文档)。on('click',')。email resend、.email send、.show doc、.show acc、.more acc、.no、.yes、.term',function(){$.fn.doAction(classname,comEntry);});
然后在函数中执行类似于$(document)的操作({
。那么我如何删除该函数的旧事件呢?嗯,我猜对了…!你可以把它放在该函数之外。在你有ajax调用的地方。听起来不错。我会尝试你的建议,如果可行(或不可行)就回来。用我的示例扩展你的答案,希望这能帮助所有有相同问题的人。