当主浏览器的网址发生变化时,我正在使用以下代码来调用函数。
var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIWebNavigation)
.QueryInterface(Components.interfaces.nsIDocShellTreeItem)
.rootTreeItem
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindow);
mainWindow.getBrowser().addEventListener("DOMContentLoaded",function(){ getFromDB();}, false);
此getFromDB()
向服务器发送请求
request = new XMLHttpRequest();
request.open("GET", "http://www.mydomain.com/getJSON.php", true);
request.onreadystatechange = sendData;
一切正常,但问题是请求被无限次地发送到服务器。如果浏览器加载了loacalhost
内的页面,则该请求仅发送一次。
我想限制每个页面加载/请求(或URL更改)仅发送一次请求。
我使用了一些布尔检查。但它们不起作用。
var check=0;
if(check==0)
{
check=1;
getFromDb();
}
在第一个addEventListener
内:8
帮帮我搞定。
答案 0 :(得分:0)
你需要一个全局变量
if(window.check==0||typeof(window.check)=="undefined")
{
window.check=1;
getFromDb();
}
答案 1 :(得分:0)
这条线是否正确?如果我假设函数名称为sendData,那么它可能会在就绪状态更改时再次发送数据:
request.onreadystatechange = sendData;
sendData在做什么?
答案 2 :(得分:0)
var listener = function(e){
getFromDB();
mainWindow.getBrowser().removeEventListener("DOMContentLoaded",listener, false);
}
mainWindow.getBrowser().addEventListener("DOMContentLoaded", listener, false)
无论如何都是这样的。
不要引入全局变量或标志,只需正确使用侦听器系统。
答案 3 :(得分:0)
我还认为你需要一个全局变量。使用global var和getFromDb()内部,将var的值更改为某个值,以便检查是否设置了此var。
var check = 0;
if (check == 0) {
getFromDb();
}
function getFromDb() {
....
...
check = 1;
...
}