2012-07-20 19 views
8

Sto scrivendo una funzione AJAX che richiede dati dal mio webservice Python JSON. La mia richiesta AJAX assomiglia:Servizio web JSONP con python

url = "http://localhost:8001/blah" 
    $.ajax({ 
     url: url, 
     type: 'get', 
     dataType: 'jsonp', 
     success: function(data) { 
      console.log('hi') 
     } 
    }); 

Per ora, il mio servizio web Python ha una funzione che gestisce la richiesta di '/ bla' che ha la seguente dichiarazione di ritorno:

return json.dumps({'a':1, 'b':2 }) 

La mia funzione AJAX è non riesco a recuperare una risposta dal mio servizio web Python, ma non ho alcun errore in Firebug. Qual è il mio webservice o javascript che sbaglia?

+2

Questo non ti darà JSONP. –

risposta

9

Cosa succede quando si utilizza il tipo di dati JSONP di Jquery, è che il nome di una funzione di richiamata viene inviato come parametro GET come parte dell'URL, quindi in realtà stai interrogando qualcosa come "http: // localhost: 8001/blah? callback = json125348274839" .

La vostra risposta dal server web dovrebbe essere simile a questo:

return "%s({'a':1, 'b':2 })" % _GET_PARAMS('callback') 

modo il server web restituisce somthing come "json125348274839 ({ 'a': 1, 'b': 2})"

Spero che questo aiuti!

+0

Molto vicino. Hai perso due dettagli, uno sciocco, uno cattivo. –

+0

veloce e sporco! +1 – loretoparisi

1

Attiva (o aggiungi) l'accesso al servizio web Python. Ispeziona i log del tuo server web ... stai ricevendo la richiesta dal tuo client javascript? Il tuo server web sta registrando che sta restituendo una risposta?

Forse dipende dal framework che si sta utilizzando. È semplice come restituire una stringa dalla funzione del gestore? Forse il gestore dovrebbe restituire un elenco di stringhe e, poiché non sta ottenendo una lista, non restituisce nulla al client. Cerca nei log del tuo server web eventuali errori.

1

hai dimenticato di chiudere preventivo e virgola nella prima riga =)

Se non è d'aiuto, controllo seguente:

  1. voce dell'Elenco
  2. Che cosa stai usando come servizio di pitone? Django, fiasco, qualcos'altro? Forse puoi fornire il codice Python?
  3. Inoltre, guarda la scheda 'Rete' di Firebug e, dopo esserti assicurato che la richiesta di 'url' sia effettivamente gestita (non restituita 404 o 50x codici, ma 200), controlla la sottoscheda 'Risposta'.

Spero che questo aiuti!

+0

Grazie, hai capito! – Michael

6

Zack capito. Il mio javascript era corretto. Ho cambiato la mia dichiarazione di ritorno di Python al seguente:

callback = request.args.get('callback') 
return '{0}({1})'.format(callback, {'a':1, 'b':2})