Возникли проблемы с получением SimpleHTTPRequestHandler для ответа на AJAX

Недавно я попытался реализовать SimpleHTTPRequestHandler для приема запросов AJAX в соответствии с это.

Хотя кажется, что все работает до получения запроса от клиента, я не могу ничего отправить клиенту, когда я пытаюсь выполнить self.wfile.write("foo"), я получаю ответ от клиента; однако текст ответа от XmlObject полностью пуст!?!

Если кто-то может пролить свет на это, это было бы здорово!

EDIT: я думаю, что мой вызов AJAX структурирован правильно, так как я получаю ответы от Python (я проверял в режиме отладки); однако я не получаю никакого ответа responseText, когда возвращаю объект.


person jab    schedule 31.07.2012    source источник


Ответы (1)


Убедитесь, что в вашем ответе есть send_header() с типом содержимого. Я видел, как запросы AJAX путаются без этого. Вы также можете попробовать переключить POST на GET для отладки и убедиться, что браузер может видеть контент.

Вот простой пример HTTP для возврата XML, если вы указываете свой запрос или браузер на 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()
person pd40    schedule 02.08.2012