只发送一次Ajax请求一次
我使用以下代码在主浏览器的url更改时调用一个函数。只发送一次Ajax请求一次
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 帮我弄这个。
您需要为
if(window.check==0||typeof(window.check)=="undefined")
{
window.check=1;
getFromDb();
}
的全局变量,这条线是否正确?如果我假设函数名称为sendData,那么它可能会在就绪状态变化时再次发送数据:
request.onreadystatechange = sendData;
sendData在做什么?
'sendData'是一个函数。这一行正在调用'onreadystatechange'。 – 2010-08-03 12:02:16
也许sendData再次进行ajax调用。 onreadystatechange将被调用几次(4) – naikus 2010-08-03 12:18:39
var listener = function(e){
getFromDB();
mainWindow.getBrowser().removeEventListener("DOMContentLoaded",listener, false);
}
mainWindow.getBrowser().addEventListener("DOMContentLoaded", listener, false)
反正就是这样。
不要引入全局变量或标志,只需正确使用监听器系统即可。
这看起来似乎有部分工作。一旦页面刷新/重新加载,eventlistener将从DOM中删除。 我想加载URL更改事件监听器,相应的功能只应调用一次。 – 2010-08-03 12:10:38
我也认为你需要一个全局变量。使用全局var和内部getFromDb(),将var的值更改为某些内容,以便可以检查此var是否已设置。
var check = 0;
if (check == 0) {
getFromDb();
}
function getFromDb() {
....
...
check = 1;
...
}
我甚至使用过全局变量。但我没有得到结果。 – 2010-08-03 12:03:09