Как вызвать функцию вне jQuery(document).ready с помощью setTimeout()?

StackOverflow https://stackoverflow.com/questions/1375722

  •  21-09-2019
  •  | 
  •  

Вопрос

Мой код выглядит примерно так:

$(document).ready(function(){
    var cont = 0;

    function func1(cont)
    {
        //Some code here
        search.setSearchCompleteCallback(this, searchComplete, null);
        //Some other code
    }
    func1(cont);

    function searchComplete()
    {
        //Some code
        cont += 1;
    if (cont < length ) {
    func1(cont);
    } else {
            // Other code
    }
    }
});

Итак, я хочу отложить выполнение func1(cont);внутри функции searchComplete().Причина этого в том, что весь код предназначен для работы с API поиска Google и проверкой PageRank, и мне нужно замедлить работу скрипта, чтобы меня не забанили.(Особенно по поводу запросов, касающихся PR-проверки).Если я просто использую setTimeout() для func1(cont);он говорит, что func1() не определен, если я попытаюсь получить функцию вне $(document).ready(), он увидит функцию, но код Google не увидит, поскольку ему нужна полностью загруженная страница.

Как исправить setTimeout или как приостановить выполнение скрипта на несколько секунд?

Спасибо!

Это было полезно?

Решение

Писать

func1(cont);

как

window.setTimeout(function() {
    func1(cont);
}, 1000);

Другие советы

Вместо объявления функции следующим образом:

function func1(cont) {}

объявите это так:

var func1 = function(cont) {}

Вам нужно будет немного изменить код:

$(document).ready(function(){
    var cont = 0;
    var func1;

    var searchComplete = function()
    {
        //Some code
        cont += 1;
        if (cont < length ) {
            func1(cont);
        } else {
                // Other code
        }
    }

    func1 = function(cont)
    {
        //Some code here
        search.setSearchCompleteCallback(this, searchComplete, null);
        //Some other code
    }

    func1(cont);
});

Я бы попробовал что-то вроде этого.Я предпочитаю объявлять переменные и функции внутри пространства имен jquery, но вы также можете переместить переменную cont и функции за пределы функции готовности документа и сделать их доступными глобально.

$(document).ready(function(){
    $.cont = 0;
    $.func1 = function() {
        //Some code here
        search.setSearchCompleteCallback(this, $.searchComplete, null);
        //Some other code
    }

    $.searchComplete = function() {
        //Some code
        $.cont += 1;
        if (cont < length ) {
            setTimeout($.func1,1000);
        } else {
            // Other code
        }
    }

     setTimeout($.func1,1000); // delay the initial start by 1 second
});

Надеюсь, я правильно понял ваше описание:

  • Событие document.ready() срабатывает
  • Внутри document.ready() вы хотите, чтобы функция вызывалась через X миллисекунд.
  • Эта функция связывает объект Google search.setSearchCompleteCallback() с другой функцией (которая, похоже, нуждается в родительском объекте из this)

Если это так, то зачем вам нужны какие-либо функции, объявленные внутри области действия document.ready()?Можете ли вы просто сделать все три глобальными?например

var search = null; // initialise the google object
var cont = 0;

function timedSearch()
{
  search.setSearchCompleteCallback(this, searchComplete, null);
}

function searchComplete()
{
   if (++cont < length) // postfix it below if this is wrong
       setTimeout(timedSearch,1000);
}

$(document).ready(function()
{
   setTimeout(timedSearch,1000);
}

Ударьте меня минусами, если я неправильно понял.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top