python list in javascript array umwandeln?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
janmartin
User
Beiträge: 3
Registriert: Samstag 27. Juni 2009, 17:59

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.
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.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

JSON *ist* Javascript, daher kannst und solltest du das nehmen. Nimm für Python < 2.6 simplejson.

Gruß
janmartin
User
Beiträge: 3
Registriert: Samstag 27. Juni 2009, 17:59

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
janmartin
User
Beiträge: 3
Registriert: Samstag 27. Juni 2009, 17:59

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
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()`.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:Die musst Du halt parsen, im einfachsten Fall mit `eval()`.
Wobei ``parseJSON`` besser wäre, ggf. unter Zuhilfenahme einer JS-Library.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten