Javascript 检测是否执行了函数
我有以下功能:Javascript 检测是否执行了函数,javascript,jquery,Javascript,Jquery,我有以下功能: function enviarMail() { for (var x = 1; x <= idShort; x++) { var nume = $('#Num' + x).text(); var purp = $('#Pur' + x).text(); var open = $('#Open' + x).text(); var close = $('#Close' + x).text();
function enviarMail() {
for (var x = 1; x <= idShort; x++) {
var nume = $('#Num' + x).text();
var purp = $('#Pur' + x).text();
var open = $('#Open' + x).text();
var close = $('#Close' + x).text();
var owner = $('#Owner' + x).text();
var fam = $('#Fam' + x).text();
var vs = $('#Vs' + x).text();
var sta = $('#Sta' + x).text();
var mail = $('#Mail' + x).text();
$.ajax({
type: 'POST', //POST | GET
url: urlServer + 'ws_alerts.asmx/SendMailExp',
data: '{"us":"' + owner +
'","email":"' + mail +
'","vs":"' + vs +
'","fam":"' + fam +
'","pur":"' + purp +
'","open":"' + open +
'","close":"' + close +
'","id":"' + nume + '"}',
dataType: 'json',
contentType: 'application/json',
timeout: 600000,
error: function (xhr) {
bootbox.alert("No se pudo enviar el correo.");
},
success: function (data) {
}
});
}
}
函数enviarMail(){
对于(var x=1;x您要求的内容需要从服务器端强制执行。由于客户端可以随时从任何设备登录(如您所述),因此无法在客户端维护此功能
您希望以某种方式维护所有客户端的状态。您需要使用cookies
或session
来实现这一点,因为它们提供了不同客户端和服务器之间的状态共享。因为只有一台服务器(理论上),可以对其进行编程,以了解用户在一天内是否执行了操作。然后可以通过会话/cookie
注意:这都是假设您拥有某种身份验证/会话,可以在服务器和客户端之间共享。否则,当您从不同的设备/浏览器打开客户端时,服务器无法识别您
该过程可以如下所示:
- 用户从ClientA登录。在服务器端(在诸如Redis或Memcache之类的内存存储中,或在DB中),服务器检查用户的id,以查看
functionTriggered
是否已为true。如果否,则在auth响应中,服务器发送functionTriggered=false
标志(在客户端上设置cookie)
- ClientA进行AJAX调用,服务器在存储中设置
functionTriggered=true
- 用户从ClientB登录。登录后,服务器会看到
functionTriggered=true
,因此会发送此标志。服务器会设置一个指示此标志的cookie。客户端会看到此标志并跳过AJAX请求
需要从服务器端强制执行您的请求。由于客户端可以随时从任何设备登录(如您所述),因此无法在客户端维护此功能
您希望以某种方式维护所有客户端的状态。您需要使用cookies
或session
来实现这一点,因为它们提供了不同客户端和服务器之间的状态共享。因为只有一台服务器(理论上),可以对其进行编程,以了解用户在一天内是否执行了操作。然后可以通过会话/cookie
注意:这都是假设您拥有某种身份验证/会话,可以在服务器和客户端之间共享。否则,当您从不同的设备/浏览器打开客户端时,服务器无法识别您
该过程可以如下所示:
- 用户从ClientA登录。在服务器端(在诸如Redis或Memcache之类的内存存储中,或在DB中),服务器检查用户的id,以查看
functionTriggered
是否已为true。如果否,则在auth响应中,服务器发送functionTriggered=false
标志(在客户端上设置cookie)
- ClientA进行AJAX调用,服务器在存储中设置
functionTriggered=true
- 用户从ClientB登录。登录后,服务器会看到
functionTriggered=true
,因此会发送此标志。服务器会设置一个指示此标志的cookie。客户端会看到此标志并跳过AJAX请求
我同意@dustinothless,但与Dustin所说的相反,我建议单独打一个电话(以保持事情的独立性并维护软件工程原则)服务器请求是否可以发送AJAX调用。但是,服务器将根据之前是否收到请求做出决定——这可以通过使用数据库或使用比较上次修改日期的文件来完成(这样您也可以记录)--如果它已经收到一个请求,那么服务器将给出执行AJAX调用的OK
尽管上述方法可行,但效率不高,也不安全,因为不管服务器怎么说,客户端都可能发送AJAX请求(即黑客可能导致DoS攻击),因此,您应该只使用一个函数(此调用偶数),并让服务器决定(使用上述方法)是否发送电子邮件。我同意@Dustinothless,但与Dustin所说的相反,我建议单独打一个电话(将事情分开并维护软件工程原则)服务器请求是否可以发送AJAX调用。但是,服务器将根据之前是否收到请求做出决定——这可以通过使用数据库或使用比较上次修改日期的文件来完成(这样您也可以记录)--如果它已经收到一个请求,那么服务器将给出执行AJAX调用的OK
尽管上述方法可行,但效率不高,也不安全,因为不管服务器怎么说,客户端都可能发送AJAX请求(即黑客可能导致DoS攻击),因此,您应该只使用一个函数(此调用偶数),并让服务器决定(使用上述方法)是否发送电子邮件。对所有用户只执行一次,而不是对每个用户执行一次?您需要维护服务器上的状态。该功能需要执行AJAX调用,以确定当天是否有其他用户运行过该功能。根据您的要求,我相信您需要结合后端脚本和DB或cron job您需要一台服务器来完成此任务。您有应用程序服务器吗?@Barmar是的,所有用户只执行一次。您不需要任何类似的操作。只需要一个表来存储上次运行函数的时间。下次用户登录时,请检查日期是否相同。对所有用户只执行一次,而不是对每个用户执行一次?您需要n服务器上的状态。该函数需要