Seite 1 von 1

python list in javascript array umwandeln?

Verfasst: Samstag 27. Juni 2009, 18:11
von janmartin
Hallo,

mein Server liefert laut Firebug nachfolgendes auf eine Anfrage aus dem javascript eienr Website zurück:

(u'DSCN0040.JPG', u'MULTIPOINT(11.879112 43.466012, 11.879213 43.467255, 11.880172 43.468243, 11.881478
43.464455, 11.881515 43.468442, 11.881635 43.468365)')

Wie kann ich das in ein javascript array umwandekn, so dass ich es in javascript weiterverarbeiten kann?

So al a:
myarray[0] =DSCN0040.JPG
myarray[1,0] =11.879112
myarray[1,1] =43.466012
...

Oder liegt mein Fehler schon auf der Server Seite?
Gibt es hierfür einen besseren Weg als nachfolgenden, wenn der Client ein javascript array braucht?

return(row[0].rpartition('/')[2], row[1])

Danke,
Jan

P.S.:
Sorry, ich bin unerfahren sowohl mit Javascript als auch Python.

Verfasst: Samstag 27. Juni 2009, 18:24
von BlackJack
Wenn Du zwischen Python und JavaScript kommunizieren willst, bietet sich eigentlich JSON als Format geradezu an. Dazu sollte der Server halt auch JSON liefern und kein Python. Ab Python 2.6 gibt's ein JSON-Modul in der Standardbibliothek. Für ältere Python-Versionen gibt es mindestens zwei JSON-Bibliotheken. Ich habe mal `simplejson` verwendet.

Verfasst: Samstag 27. Juni 2009, 18:31
von Dauerbaustelle
JSON *ist* Javascript, daher kannst und solltest du das nehmen. Nimm für Python < 2.6 simplejson.

Gruß

Verfasst: Samstag 27. Juni 2009, 19:13
von janmartin
OK,

ich habe per Synaptic Package Manager python-simplejson installiert. (Ubuntu Jaunty)

Und dann dies in das python script hinzugefügt:

import simplejson as json

Frage:
Ist nachfolgendes so richtig um auf dem Server die Antwort zu senden, oder liege ich falsch?

return(json.dumps((row[0], row[1])))

Laut Firebug kommt nun dies an;
["DSCN0042.JPG", "MULTIPOINT(11.879112 43.466012, 11.879213 43.467255, 11.880172 43.468243, 11.881478 43.464455, 11.881515 43.468442, 11.881635 43.468365, 11.884538 43.467082, 11.885127 43.467448, 11.885395
43.467157)"]

Leider kann ich jedoch nicht per responseText[0] auf DSCN0042.JPG zugreifen?

Danke,
Jan

Verfasst: Samstag 27. Juni 2009, 20:03
von janmartin
Also ich habe in Firebug noch mal das DOM angeschaut.

responsetext ist
"["DSCN0042.JPG", "MULTIPOINT(11.879112 43.466012, 11.879213 43.467255, 11.880172 43.468243, 11.881478 43.464455, 11.881515 43.468442, 11.881635 43.468365, 11.884538 43.467082, 11.885127 43.467448, 11.885395 43.467157)"]"

Und die Daten liegen nicht noch irgendwo weiter aufgeschlüsselt vor.

Die Anfrage selbst wird von Openlayers so an den Server geschickt:

var uri = "http://localhost/cgi-bin/data.py?lat="+ ... lonlat.lat;
OpenLayers.loadURL(uri, '', this, myfunction);

Und die Antywort dann zum testen so angezeigt:

function myfunction(response) {
globalresponse = response;
alert ("globalresponse:"+globalresponse.responseText);

Hilft Euch dies für eine Antwort?

Danke,
Jan

Verfasst: Samstag 27. Juni 2009, 20:37
von BlackJack
@janmartin: Vom Server können nur Bytes gesendet werden, also bekommst Du da eine Zeichenkette. Die musst Du halt parsen, im einfachsten Fall mit `eval()`.

Verfasst: Samstag 27. Juni 2009, 20:56
von Leonidas
BlackJack hat geschrieben:Die musst Du halt parsen, im einfachsten Fall mit `eval()`.
Wobei ``parseJSON`` besser wäre, ggf. unter Zuhilfenahme einer JS-Library.