Gå til innhold

Hvordan sende JSON vha ajax, jquery og cherrypy


Anbefalte innlegg

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 av Kirchhoff
Lenke til kommentar
Videoannonse
Annonse
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 av snippsat
  • Liker 2
Lenke til kommentar

 

 

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...