Kirchhoff Skrevet 12. mars 2015 Del Skrevet 12. mars 2015 (endret) Hei, Jeg har brukt en del timer nå på å få til å sende en json fra og til en klient. Jeg er ikke sikker på om kanskje jeg mangler en header, og hva eventuelt skal stå i den headeren. Jeg har lastet ned noe kode som ser ut til å sende en streng vha ajax, men jeg vil altså sende og motta en json: jquery/javascript $("#testform").submit(function() { // post the form values via AJAX… var postdata = {name: $("#name").val()} ; $.post('/submit', postdata, function(data) { // and set the title with the result $("#title").html(data['title']) ; }); return false ; }); cherrypy/python: @cherrypy.expose def submit(self, name): cherrypy.response.headers['Content-Type'] = 'application/json' return simplejson.dumps(dict(title="Hello, %s" % name)) Dette har jeg lyst til å gjøre: Lage en json fylt med data fra et html form Sende json til cherrypy server, og konvertere det til et map Konvertere et map til en json og sende til klienten sin javascript Konvertere fra json til noe maplignende objekt i klienten sin javascript takk for hjelp! Endret 12. mars 2015 av Kirchhoff Lenke til kommentar
snippsat Skrevet 12. mars 2015 Del Skrevet 12. mars 2015 (endret) Jeg har brukt en del timer nå på å få til å sende en json fra og til en klient. Jeg er ikke sikker på om kanskje jeg mangler en header, og hva eventuelt skal stå i den headeren. Jeg har lastet ned noe kode som ser ut til å sende en streng vha ajax, men jeg vil altså sende og motta en json: CherrPy har hatt en stor ansiktsløftning i senere tid,og eldre eksempler du finner på nettet vil kanskje ikke fungere. simplejson har for mange år siden forandret navn til json,og er nå med standard bibliotek til Python. For og sende og motta JSON i CherrPy doc. json_in/out encodes the output and sets the header for you. En Test. Server: import cherrypy class Root(): @cherrypy.expose @cherrypy.tools.json_in() def index(self): data = cherrypy.request.json print(data) if __name__ == '__main__': cherrypy.quickstart(Root) Jeg bruker Requests til og sende JSON,og tester uten og sende Header. >>> import requests >>> requests.post("http://127.0.0.1:8080", json={'Hello': 'A JSON test'}) <Response [200]> Server response: [13/Mar/2015:00:18:49] ENGINE Listening for SIGTERM. [13/Mar/2015:00:18:49] ENGINE Bus STARTING CherryPy Checker: The Application mounted at '' has an empty config. [13/Mar/2015:00:18:49] ENGINE Started monitor thread 'Autoreloader'. [13/Mar/2015:00:18:49] ENGINE Started monitor thread '_TimeoutMonitor'. [13/Mar/2015:00:18:49] ENGINE Serving on http://127.0.0.1:8080 [13/Mar/2015:00:18:49] ENGINE Bus STARTED {'Hello': 'A JSON test'} 127.0.0.1 - - [13/Mar/2015:00:19:12] "POST / HTTP/1.1" 200 - "" "python-requests/2.4.3 CPython/2.7.9 Windows/7" Sende json til cherrypy server, og konvertere det til et map Her regner jeg med at du mener er dictionary,som er map i Java/C++. json.load() vil ta en "json string" og gjøre det om til et Python dictionary. >>> import json >>> data = {'Hello': 'A JSON test'} >>> data_dump = json.dumps(data) >>> data_dump '{"Hello": "A JSON test"}' >>> json.loads(data_dump) {u'Hello': u'A JSON test'} >>> type(json.loads(data_dump)) <type 'dict'> Endret 13. mars 2015 av snippsat 2 Lenke til kommentar
Kirchhoff Skrevet 13. mars 2015 Forfatter Del Skrevet 13. mars 2015 Jeg har brukt en del timer nå på å få til å sende en json fra og til en klient. Jeg er ikke sikker på om kanskje jeg mangler en header, og hva eventuelt skal stå i den headeren. Jeg har lastet ned noe kode som ser ut til å sende en streng vha ajax, men jeg vil altså sende og motta en json: CherrPy har hatt en stor ansiktsløftning i senere tid,og eldre eksempler du finner på nettet vil kanskje ikke fungere. simplejson har for mange år siden forandret navn til json,og er nå med standard bibliotek til Python. For og sende og motta JSON i CherrPy doc. json_in/out encodes the output and sets the header for you. En Test. Server: import cherrypy class Root(): @cherrypy.expose @cherrypy.tools.json_in() def index(self): data = cherrypy.request.json print(data) if __name__ == '__main__': cherrypy.quickstart(Root) Jeg bruker Requests til og sende JSON,og tester uten og sende Header. >>> import requests >>> requests.post("http://127.0.0.1:8080", json={'Hello': 'A JSON test'}) <Response [200]> Server response: [13/Mar/2015:00:18:49] ENGINE Listening for SIGTERM. [13/Mar/2015:00:18:49] ENGINE Bus STARTING CherryPy Checker: The Application mounted at '' has an empty config. [13/Mar/2015:00:18:49] ENGINE Started monitor thread 'Autoreloader'. [13/Mar/2015:00:18:49] ENGINE Started monitor thread '_TimeoutMonitor'. [13/Mar/2015:00:18:49] ENGINE Serving on http://127.0.0.1:8080 [13/Mar/2015:00:18:49] ENGINE Bus STARTED {'Hello': 'A JSON test'} 127.0.0.1 - - [13/Mar/2015:00:19:12] "POST / HTTP/1.1" 200 - "" "python-requests/2.4.3 CPython/2.7.9 Windows/7" Sende json til cherrypy server, og konvertere det til et map Her regner jeg med at du mener er dictionary,som er map i Java/C++. json.load() vil ta en "json string" og gjøre det om til et Python dictionary. >>> import json >>> data = {'Hello': 'A JSON test'} >>> data_dump = json.dumps(data) >>> data_dump '{"Hello": "A JSON test"}' >>> json.loads(data_dump) {u'Hello': u'A JSON test'} >>> type(json.loads(data_dump)) <type 'dict'> Takk for svar! Fikk til det jeg ønsket nå. Med din python kode og denne javascript koden: var arr = { City: 'Moscow', Age: 25 }; $.ajax({ url: '/POST', type: 'POST', data: JSON.stringify(arr), contentType: 'application/json; charset=utf-8', dataType: 'json', async: true, success: function(msg) { alert(msg); } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå