只发送一次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(); 
} 
+0

我甚至使用过全局变量。但我没有得到结果。 – 2010-08-03 12:03:09

的全局变量,这条线是否正确?如果我假设函数名称为sendData,那么它可能会在就绪状态变化时再次发送数据:

request.onreadystatechange = sendData; 

sendData在做什么?

+0

'sendData'是一个函数。这一行正在调用'onreadystatechange'。 – 2010-08-03 12:02:16

+0

也许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) 

反正就是这样。

不要引入全局变量或标志,只需正确使用监听器系统即可。

+0

这看起来似乎有部分工作。一旦页面刷新/重新加载,eventlistener将从DOM中删除。 我想加载URL更改事件监听器,相应的功能只应调用一次。 – 2010-08-03 12:10:38

我也认为你需要一个全局变量。使用全局var和内部getFromDb(),将var的值更改为某些内容,以便可以检查此var是否已设置。

var check = 0; 
if (check == 0) { 
getFromDb(); 
} 

function getFromDb() { 

.... 
... 
check = 1; 
... 
}