2012-07-20 12 views
8

estoy escribiendo una función de AJAX que solicita datos de mi servicio web JSON Python. Mi petición AJAX parece:servicio web JSONP con el pitón

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

Por ahora, mi servicio web Python tiene una función que controla la solicitud a '/ bla' que tiene la siguiente instrucción de retorno:

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

Mi función AJAX es no recuperar correctamente una respuesta de mi servicio web de Python, pero no recibo ningún error en Firebug. ¿Qué está haciendo mal mi servicio web o JavaScript?

+2

Eso no le dará JSONP. –

Respuesta

9

¿Qué sucede cuando utiliza el tipo de datos JSONP de Jquery, es que un nombre de función de devolución de llamada se envía como un parámetro GET como parte de su URL, por lo que realmente está consultando algo como "http: // localhost: 8001/blah? callback = json125348274839 ".

Su respuesta desde el servidor web debe tener este aspecto:

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

por lo que su servidor web devolverá algo como "json125348274839 ({ 'a': 1, 'b': 2})"

Espero que ayude!

+0

Muy cerca. Te perdiste dos detalles, uno tonto, uno malo. –

+0

rápido y sucio! +1 – loretoparisi

1

Encienda (o añadir) el registro en el servicio web de Python. Inspeccione los registros de su servidor web ... ¿recibe la solicitud de su cliente de JavaScript? ¿El servidor web está registrando que está devolviendo una respuesta?

Posiblemente Depende del marco que está utilizando. ¿Es tan simple como devolver una cadena desde la función del controlador? Quizás se supone que el controlador devuelve una lista de cadenas y, como no está obteniendo una lista, no le está devolviendo nada al cliente. Mire en los registros de su servidor web si hay errores.

1

haya olvidado de cerrar la cita y coma en la primera línea =)

Si no se ayuda, verificación siguiente:

  1. elemento de la lista
  2. ¿Qué estás usando como servicio de pitón? Django, matraz, algo más? Tal vez puede proporcionar proporcionar código python?
  3. También, busque en la pestaña de Firebug la 'red' y, después de asegurarse de que la solicitud de 'url' es en realidad maneja (no regresó 404 o 50x códigos, pero 200), comprobar sub-pestaña 'Respuesta'.

Hope this helps!

+0

¡Gracias, lo tienes! – Michael

6

Zack tiene. Mi javascript fue correcto He cambiado de instrucción de retorno de pitón a la siguiente:

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