2012-07-31 11 views
9

Recentemente ho provato a implementare SimpleHTTPRequestHandler per accettare richieste AJAX in base a this.Avere difficoltà a ottenere SimpleHTTPRequestHandler per rispondere a AJAX

Anche se tutto sembra funzionare fino a ricevere la richiesta dal client, non riesco a inviare nulla al client, quando provo a self.wfile.write ("foo"), ottengo una risposta indietro nel cliente; tuttavia, il testo di risposta da XmlObject è completamente vuoto!?!

Se qualcuno può far luce su questo, sarebbe fantastico!

EDIT: Penso che la mia chiamata AJAX sia strutturata correttamente poiché ricevo risposte da Python (ho controllato la modalità di debug); tuttavia, non ricevo alcun messaggio indietro responseTesto quando ottengo un oggetto indietro.

risposta

9

Assicurarsi che la risposta abbia un send_header() con un tipo di contenuto. Ho visto le richieste AJAX confondersi senza questo. Puoi anche provare a passare il tuo POST a un GET per il debug e assicurarti che il browser possa vedere il contenuto.

Ecco un semplice esempio HTTP per la restituzione di XML, se si punta il query o browser per 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() 
Problemi correlati