Frage

Mein Code sieht ungefähr so ​​aus:

$(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
    }
    }
});

Ich möchte also die Ausführung von func1(cont) verzögern;innerhalb der Funktion searchComplete().Der Grund dafür ist, dass der Code lediglich mit der Google-Such-API und den PageRank-Prüfungen zusammenarbeitet und ich das Skript verlangsamen muss, damit ich nicht gesperrt werde.(Besonders für die Anfragen, die es bezüglich des PR-Checks stellt).Wenn ich einfach setTimeout() für func1(cont); verwende;Es heißt, dass kein func1() definiert ist. Wenn ich versuche, die Funktion außerhalb von $(document).ready() abzurufen, wird die Funktion angezeigt, der Google-Code jedoch nicht, da die Seite vollständig geladen werden muss.

Wie kann ich setTimeout beheben oder wie kann ich das Skript für einige Sekunden anhalten?

Danke!

War es hilfreich?

Lösung

Schreiben

func1(cont);

als

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

Andere Tipps

Anstatt die Funktion wie folgt zu deklarieren:

function func1(cont) {}

deklariere es so:

var func1 = function(cont) {}

Sie müssen Ihren Code ein wenig umstellen:

$(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);
});

Ich würde so etwas versuchen.Ich ziehe es vor, die Variablen und Funktionen innerhalb des JQuery-Namensraums zu deklarieren, aber Sie könnten die Variable cont und die Funktionen auch außerhalb der Funktion „Dokument bereit“ verschieben und sie global verfügbar machen.

$(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
});

Hoffentlich habe ich deine Beschreibung richtig verstanden:

  • Das Ereignis document.ready() wird ausgelöst
  • Innerhalb von document.ready() soll eine Funktion nach X Millisekunden aufgerufen werden
  • Diese Funktion verbindet das Google-Objekt search.setSearchCompleteCallback() mit einer anderen Funktion (die anscheinend ein übergeordnetes Objekt benötigt). this)

Wenn dies der Fall ist, warum benötigen Sie dann eine der im document.ready()-Bereich deklarierten Funktionen?Kann man nicht einfach alle drei global machen?z.B.

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);
}

Schlagen Sie mir mit den Downvotes zu, wenn ich etwas falsch verstanden habe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top