Отправка Ajax-запроса только один раз - PullRequest
2 голосов
/ 03 августа 2010

Я использую следующий код для вызова функции при изменении URL основного браузера.

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 голосов
/ 23 сентября 2010

Я также думаю, что вам нужен глобальный var.Используйте глобальную переменную и внутри getFromDb () измените значение переменной на что-нибудь, чтобы вы могли проверить, установлен этот переменный или нет.

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

function getFromDb() {

....
...
check = 1;
...
}
0 голосов
/ 03 августа 2010

Правильна ли эта строка?Если я принимаю имя функции как sendData, возможно, она снова отправляет данные при изменении состояния готовности:

request.onreadystatechange = sendData;

Что делает sendData?

0 голосов
/ 03 августа 2010
var listener = function(e){
    getFromDB();
    mainWindow.getBrowser().removeEventListener("DOMContentLoaded",listener, false);
}

mainWindow.getBrowser().addEventListener("DOMContentLoaded", listener, false)

Что-то подобное в любом случае.

Не вводите глобальные переменные или флаги, просто используйте систему прослушивания правильно.

0 голосов
/ 03 августа 2010

вам нужна глобальная переменная для этого

if(window.check==0||typeof(window.check)=="undefined")
{
window.check=1;
getFromDb();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...