我有一个使用Phonegap和JqueryMobile开发的应用程序。
此应用已在iOS,Android和iPhone中下载约15.000倍。 代码在所有平台上完全相同。
有一段时间后端服务器超载,当我查看日志时,我看到一个用户发送了数百次相同的呼叫。 (用户是真实的人,我和他们谈过这个问题,所以它不是机器人或类似的东西)
对我来说,似乎click事件是循环或服务器调用是循环但无法检测原因。
这已经发生在15.000中的3个用户(据我所知),并且用户在问题发生之前已多次使用该应用程序。这个问题发生在Android和iOS上,所以在我看来jquerymobile / javascript方面存在问题。
知道可能导致此问题的原因是什么?
答案 0 :(得分:6)
我要先说明你的js / DOM生成中的设计问题。
绑定已绑定的事件时,jquery将再次绑定它,而不检查该事件是否已被绑定。如果你想附加多个,这很好 事件对同一事件起作用。
无论如何,有几种方法可以解决这个问题。一种是在绑定事件之前取消绑定事件,使用$.off()
,例如
$("#myDiv").off("click").on("click", function(e) {
// ...
})
另一个是在事件函数内部检查事件是否已被触发,例如:
$("#myDiv").on("click",function(e) {
if(e.handled !== true) {
alert('Clicked');
e.handled = true;
}
})
您可以找到更多有利有弊的解决方案here
答案 1 :(得分:2)
我在第一次触摸后最终禁用了按钮并解决了问题。
似乎主要问题是按两次按钮,但由于某种原因我无法检测到它,它进入了一个无限循环。
答案 2 :(得分:0)
你在onclick函数中做了event.preventDefault()和event.stopPropagation()吗? (没有它,浏览器的行为可能会有很大差异)
其他想法,在onclick功能开始时隐藏或禁用按钮可能很有用,以避免用户多次点击。
我相信你已经做了这一切,但以防万一......