HTML5 LocalStorage und anderes gedöns

Die Bada Entwickler Ecke. Hier können sich App- oder Theme-Entwickler gegenseitig bei Problemen unterstützen und neue Projekte planen.
Post Reply
User avatar
sCion
mobile-Legend
Posts: 3375
Joined: Fri 22. Jul 2011, 07:12
Smartphone system: Windows
Netzbetreiber: Netzclub (o2)
BS: Windows 7 64bit
Location: Berlin
Contact:

HTML5 LocalStorage und anderes gedöns

Post by sCion »

Hi,

Ich verzweifle grade am Parsen eines JSON-Results...

Ich erhalte vom Server folgendes

Code: Select all

{
    "access_token": "dc19a1ea88",
    "token_type": "bearer",
    "expires_in": 3600,
    "refresh_token": "20ad15128b",
    "scope": "read_public"
}
Nun möchte ich die einzelnen Werte daraus jeweils in einer Variablen ablegen... Doch irgendwie finde ich keinen leicht verständlichen parser für JavaScript :/
Devices: Wave 3, Wave 1, Wave M, Tizen RD-PQ, Ativ S

Kein Support via PN.

Lead Developer of SciDev
AppsReader | Baby Count | LiveClock PRO | SMS|ER
User avatar
sCion
mobile-Legend
Posts: 3375
Joined: Fri 22. Jul 2011, 07:12
Smartphone system: Windows
Netzbetreiber: Netzclub (o2)
BS: Windows 7 64bit
Location: Berlin
Contact:

Re: JSON Result parsen

Post by sCion »

Ok geparst wird jetzt, aber nicht gespeichert :(

Das ganze ist in einem AJAX-Aufruf eingebettet und soll ausgelöst werden, wenn der Aufruf erfolgreich ist.

Der Login funktioniert, nur leider das speichern der Werte vom JSONObj nicht. Außerdem wird irgendwie meine Osp.Core.Function.delay nicht angesprochen nach dem success :(

Code: Select all

					'success' : function(responseContent){
						localStorage.setItem("Username", this.loginUsername);
						localStorage.setItem("Password", this.loginPassword);
						var JSONContent = responseContent;
						var JSONObj = jsonParse(JSONContent);
						for(var Item in JSONObj)
						{
							localStorage.setItem(Item, JSONObj[Item]);
						}
						Osp.Core.Function.delay(this.initMain, 5500, this);
					},
Devices: Wave 3, Wave 1, Wave M, Tizen RD-PQ, Ativ S

Kein Support via PN.

Lead Developer of SciDev
AppsReader | Baby Count | LiveClock PRO | SMS|ER
Seko
mobile-Infected
Posts: 75
Joined: Thu 9. Feb 2012, 12:54
BS: Windows 7 64bit

Re: HTML5 LocalStorage und anderes gedöns

Post by Seko »

Naja, das er den function.delay nicht anspricht liegt wohl daran, dass bei der Verarbeitung mit JSON ein Fehler aufgetreten ist, und der Rest der Ausführung gestoppt worden ist.
"var JSONContent" beinhaltet bereits das JSON-OBJ.
Wenn du vom Server ein JSON-Object zurückbekommst, führt "var JSONObj = jsonParse(JSONContent);" zu einen Fehler.
Zumindest war es bei mir so. Ich habe einfach den direkten response weiterverarbeitet.

Hast du [dataType: "json"] im ajax deklariert?

Nutze besser die "complete" funktion für das delay. Weil die wird stets ausgeführt.

lg
User avatar
sCion
mobile-Legend
Posts: 3375
Joined: Fri 22. Jul 2011, 07:12
Smartphone system: Windows
Netzbetreiber: Netzclub (o2)
BS: Windows 7 64bit
Location: Berlin
Contact:

Re: HTML5 LocalStorage und anderes gedöns

Post by sCion »

Also das verarbeiten sollte schon klappen, denn immerhin werden die Werte ja gespeichert wenn ich die App-Aufrufe.... Das bringt mir aber nichts, denn so lange die App läuft kann ich mit den Werten aus der Variablen nicht arbeiten -> sie bleiben "null"....
Devices: Wave 3, Wave 1, Wave M, Tizen RD-PQ, Ativ S

Kein Support via PN.

Lead Developer of SciDev
AppsReader | Baby Count | LiveClock PRO | SMS|ER
Seko
mobile-Infected
Posts: 75
Joined: Thu 9. Feb 2012, 12:54
BS: Windows 7 64bit

Re: HTML5 LocalStorage und anderes gedöns

Post by Seko »

Vorab ne Frage. Ist der Code C oder JS?

Der Ablauf erscheint mir nicht logisch. Das liegt aber bestimmt daran, dass zu wenig Info´s vorliegen.
Du extrahierst die Werte aus dem JSON-Obj und speicherst sie irgendwo. Das scheint aus deinen Code hervorzugehen.

Aber an was für eine Variable oder Obj übergibst du schließlich die Daten, damit sie im weiteren Verlauf zugänglich sind?

Logisch wäre für mich z.B.:

Code: Select all

var meinOBJ = //global deklariert
{
Name1 : "1",
Name2 : "2",
Name3 : "3"
}
Daten von JSON-Response speichern und an "meinOBJ" übergeben. Dann sind die Werte doch im weiteren verlauf zugänglich.

Code: Select all

meinOBJ['Name1'] = JSON-Response['Was auch immer'];
oder
meinOBJ.Name1 = JSON-Response['Was auch immer'];

u.s.w.
Sry, aber mehr ist in dem Codesnipe nicht zu erkennen.
User avatar
sCion
mobile-Legend
Posts: 3375
Joined: Fri 22. Jul 2011, 07:12
Smartphone system: Windows
Netzbetreiber: Netzclub (o2)
BS: Windows 7 64bit
Location: Berlin
Contact:

Re: HTML5 LocalStorage und anderes gedöns

Post by sCion »

Habe das aber jetzt anders (auch weil ich die API noch mal genauer nachgelesen habe :D)

Da ich nur den "refresh_token" speichern muss, brauch ich diese for-Schleife nicht mehr und nun wird auch die delay-funktion ausgeführt :D

Den Rest übergebe ich jetzt einfach an globale Variablen die aber nicht mehr mit localStorage.getItem("key") arbeiten (außer die Refreshtoken), damit geht es jetzt alles so wie ich es brauche! :D
Devices: Wave 3, Wave 1, Wave M, Tizen RD-PQ, Ativ S

Kein Support via PN.

Lead Developer of SciDev
AppsReader | Baby Count | LiveClock PRO | SMS|ER
User avatar
sCion
mobile-Legend
Posts: 3375
Joined: Fri 22. Jul 2011, 07:12
Smartphone system: Windows
Netzbetreiber: Netzclub (o2)
BS: Windows 7 64bit
Location: Berlin
Contact:

Re: HTML5 LocalStorage und anderes gedöns

Post by sCion »

Ok, also ich habe es geschafft. Der Code wird ordentlich verarbeitet. Ich verzichte jetzt auf die delay-Funktion, das verzögert nur unnötig den ganzen Prozess... Auch die for-Schleife habe ich wie erwähnt oben schon entfernt. Der Login-Vorgang dauert jetzt nur noch - je nach Verbindung 2-5 Sekunden.

Um aber aus der Success auf meiner weiterführende Funktion zuzugreifen musste ich mir innerhalb des Success eine neue Instanz aufrufen.

Das ganze sieht dann innerhalb des Success wie folgt aus

Code: Select all

				{
					localStorage.setItem("myProfile", response);
					mainObj = new Minus(frameObj);
					mainObj.initMain();
				},
Sowie muss man sich aber noch ein construct innerhalb der Class definieren

Code: Select all

	construct 	: function(frameObj) 
	{
		this.frameObj = Osp.Ui.Controls.Frame.getInstance();
	},	
So mit läuft alles schnell und zügig und ohne Fehler durch :) Wer den ganzen Quellcode sehen will, muss mir ne PN schreiben^^
Devices: Wave 3, Wave 1, Wave M, Tizen RD-PQ, Ativ S

Kein Support via PN.

Lead Developer of SciDev
AppsReader | Baby Count | LiveClock PRO | SMS|ER
Post Reply