2012-07-31 10 views
9

Hace poco intenté implementar el SimpleHTTPRequestHandler para aceptar solicitudes AJAX de acuerdo con this.Tiene problemas para obtener SimpleHTTPRequestHandler para responder a AJAX

Aunque todo parece funcionar en cuanto a recibir la solicitud del cliente, no puedo enviar nada al cliente, cuando intento self.wfile.write ("foo"), recibo una respuesta en el cliente; sin embargo, el texto de respuesta de XmlObject está completamente en blanco.

¡Si alguien puede arrojar algo de luz sobre esto, sería genial!

EDIT: Creo que mi llamada AJAX está estructurada correctamente ya que recibo respuestas de Python (me he registrado en modo de depuración); sin embargo, no recibiré ningún mensaje de respuestaTexto cuando recupere un objeto.

Respuesta

9

Asegúrate de que tu respuesta tenga un send_header() con un tipo de contenido. He visto solicitudes AJAX confundirse sin esto. También puede intentar cambiar su POST a un GET para la depuración y asegurarse de que el navegador pueda ver el contenido.

Aquí es un ejemplo sencillo de HTTP para devolver XML si apunta su navegador para consulta o 127.0.0.1/test:

import SimpleHTTPServer, SocketServer 
import urlparse 

PORT = 80 

class MyHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def do_GET(self): 

     # Parse query data & params to find out what was passed 
     parsedParams = urlparse.urlparse(self.path) 
     queryParsed = urlparse.parse_qs(parsedParams.query) 

     # request is either for a file to be served up or our test 
     if parsedParams.path == "/test": 
      self.processMyRequest(queryParsed) 
     else: 
      # Default to serve up a local file 
      SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self); 

    def processMyRequest(self, query): 

     self.send_response(200) 
     self.send_header('Content-Type', 'application/xml') 
     self.end_headers() 

     self.wfile.write("<?xml version='1.0'?>"); 
     self.wfile.write("<sample>Some XML</sample>"); 
     self.wfile.close(); 

Handler = MyHandler 

httpd = SocketServer.TCPServer(("", PORT), Handler) 

print "serving at port", PORT 
httpd.serve_forever() 
Cuestiones relacionadas