Javascript: проблема времени ожидания - PullRequest
0 голосов
/ 23 июня 2011

Когда я запускаю свой скрипт, у меня есть это:

var my_great_masterpiece = new function ()
{
        var self = this;

Затем позже в моем скрипте у меня есть это:

        response_xml: function ()
        {
            if (self.http_request.readyState == 4)
            {
                if (self.http_request.status == 404 && countXmlUrl <= 3)
                {
                    countXmlUrl++;
                    self.realXmlUrl = xmlUrl[countXmlUrl];
                    self.request_xml();
                }
                if (self.http_request.status == 200)
                {
                    self.xmlDoc = self.http_request.responseXML;
                    self.storage.setItem('domains_raw_xml', self.http_request.responseText);
                    self.main.peter_save_data();
                    self.timervar = setTimeout(function ()
                    {
// ########### Below line gives the error #############################
                        self.new_version_show_window();
                    }, 2000);
                }
            }
        },
        new_version_show_window: function ()
        {
...
}

ошибка, которую я получаю:

Ошибка: self.new_version_show_window не является функцией

Что я делаю не так?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 23 июня 2011

Из вашего кода неясно, где определено new_version_show_window.Возможно, вы могли бы явно определить это для себя:

self.new_version_show_window = function () {
    /* ... */
}

.Или вы можете определить его в локальном пространстве имен и использовать его непосредственно в вызове setTimeout:

self.timervar = setTimeout(function () {
    new_version_show_window();
 }, 2000);

или просто:

self.timervar = setTimeout(new_version_show_window, 2000);

Из-за замыкания ,переменные, объявленные во внешней функции, также доступны во внутренней функции.

Редактировать

Спасибо за публикацию всего кода.new_version_show_window определен на this.main, поэтому вы должны получить к нему доступ таким образом:

self.timervar = setTimeout(function () {
    self.main.new_version_show_window();
 }, 2000);
0 голосов
/ 23 июня 2011

Это проблема объема.new_version_show_window находится только в области видимости в той конструкции, в которой он вызывается (по-видимому, какая-то функция JQuery AJAX).Он будет доступен только для my_great_masterpiece, если вы определите его за пределами ограниченной области, в которой он сейчас существует.

0 голосов
/ 23 июня 2011

Возможно, self зарезервированное слово в JavaScript [1]. Это может вызвать у вас некоторые проблемы, поэтому попробуйте присвоить переменной имя, с которой нужно начинать.

[1] http://www.quackit.com/javascript/javascript_reserved_words.cfm

...