仅发送一次Ajax请求

时间:2010-08-03 10:21:28

标签: javascript ajax json firefox-addon

当主浏览器的网址发生变化时,我正在使用以下代码来调用函数。

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 帮帮我搞定。

4 个答案:

答案 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;
...
}