2009-07-17 7 views
3

Ich habe das folgende Setup, und ich muss wissen, wie man den Status beharrt.JavaScript Variable Scoping - Persistenzzustand?

1.) Eine externe Webseite verwendet Ajax zum Laden und Anzeigen einer .jsp-Datei, die Javascript enthält. 2.) Wenn dieses Rendering abgeschlossen ist, muss JavaScript in der JSP-Datei aufgerufen werden, um eine Aktion basierend auf den beim Rendern aufgetretenen Ergebnissen auszuführen. Insbesondere führt das Dokument eine Aktion für $ (document) .ready aus, und diese Aktionen legen fest, was bei späteren Funktionsaufrufen getan werden muss.

Die Frage, die ich habe, ist dies: Wie behalte ich die Daten und den Zustand, der erstellt wird, wenn die Seite geladen wird? Ich habe versucht, so etwas wie dieses:

Extern: ajax

Interne test.jsp

var saveMe = {}; 

function getsCalled() 
{ 
    saveMe = {'a':function(){return false;}}; 
} 

function needsData() 
{ 
    //??? 
} 

späteren test.jsp ...
External:

needsData(); 

Nichts, was ich scheinen zu versuchen zu arbeiten. Was wäre der beste Weg, den Staat in dieser Situation zu beharren?

+0

'needsData' hat in Ihrem Beispiel Zugriff auf die Variable' saveMe'. Was bedeutet "Nichts [...] funktioniert"? – Blixt

+0

Kein Versuch, Daten zu speichern, funktionierte. needsData hat keinen Zugriff auf saveMe. in getsCalled(), ich NeedsData.saveMe = {}, um dieses Problem zu beheben. –

+0

Ich bin mir nicht sicher, aber es scheint, dass Sie die NeedsData-Funktion laden, nachdem die Seite geladen wurde, aber Sie tun nichts, um zu sagen, was External ist, dass es eine Methode gibt. Sie benötigen eine globale Variable in extern und fügen dann needsData mithilfe des Prototyp-Schlüsselworts hinzu. z.B. myGlobalVar.prototype.needsData = function() {// ???} –

Antwort

0

Die Variable zum Mitglied des Funktionsobjekts machen, das funktioniert.

1

Wenn Sie über Scoping wissen möchten, lesen Sie this. Es könnte Ihnen helfen, herauszufinden, was vor sich geht.

+0

Liebe Crockford. – Alan

0

Haben Sie versucht, saveMe außerhalb des $ (document) .ready zu deklarieren? Dann sollten Sie in der Lage sein, den Wert sowohl innerhalb des $ (document) .ready als auch des externen Skripts zu ändern. Ich bin mir nicht sicher, wie das Scoping für JavaScript-Variablen von einem Ajax-Aufruf funktioniert, also bin ich nicht sicher, ob das tatsächlich funktionieren würde.