2012-07-31 27 views
9

Niedawno próbowałem zaimplementować SimpleHTTPRequestHandler do akceptowania żądań AJAX zgodnie z this.Problemy z uzyskaniem SimpleHTTPRequestHandler w odpowiedzi na AJAX

Chociaż wydaje się, że wszystko działa tak daleko, jak odbiór żądania od klienta, nie mogę wysłać niczego z powrotem do klienta, gdy próbuję self.wfile.write ("foo"), otrzymuję odpowiedź w klient; jednak tekst odpowiedzi z XmlObject jest całkowicie pusty!?!

Jeśli ktokolwiek może rzucić światło na to, to byłoby wspaniale!

EDYCJA: Myślę, że moje wywołanie AJAX jest poprawnie zbudowany, ponieważ otrzymuję odpowiedzi z Python (sprawdziłem w trybie debugowania); jednak nie otrzymuję żadnej odpowiedzi zwrotnej komunikatu, gdy otrzymam obiekt z powrotem.

Odpowiedz

9

Upewnij się, że twoja odpowiedź ma send_header() z typem zawartości. Widziałem, że żądania AJAX mogą być bez tego zmieszane. Możesz także spróbować zmienić POST na GET, aby debugować i upewnić się, że przeglądarka może zobaczyć zawartość.

Oto prosty przykład HTTP do zwracania XML, jeśli wskazują zapytanie lub przeglądarkę do 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() 
Powiązane problemy