Как вызвать функцию вне jQuery(document).ready с помощью setTimeout()?
-
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);
}
Ударьте меня минусами, если я неправильно понял.