2012-02-17 128 views
2

JSONP请求我想知道如何最好的使用Python的龙卷风来处理JSONP对象, 是最好这样做:与龙卷风

class BaseRequest(tornado.web.RequestHandler): 
     def prepare(self): 
      self.result = {"success": True}; 
     def finish(self, chunk=None): 
      self.write(self.result); 
      tornado.web.RequestHandler.finish(self, chunk); 

这似乎是一个好主意,因为你会觉得你可以做它在on_finish(),对吧?

那么,我应该像上面那样做,还是应该在我的每个处理程序中使用write()

+0

可以做什么on_finish?这与JSONp有什么关系? – 2012-02-20 21:27:49

+0

在'on_finish'中调用self.write(),你不能这样做,因为蒸汽已经关闭。因为我的所有请求都是jsonp结果(即使它看起来不像它,但我没有将它包含在一个暗示该函数的函数中),键入包含结果的变量然后写入结果会有点令人沮丧最后10次以上。 – raser 2012-02-21 02:03:24

+0

如果你想要的话,就这样做,但如果它只保存一行,这对我来说似乎不值得。 – 2012-02-22 11:59:32

回答

4

你应该重写默认write方法做这样的事情(未经测试):

class YourHandler(tornado.web.RequestHandler): 
    ... 
    def write(self, stuff): 
     super(YourHandler, self).write('callback(' + json.dumps(stuff) + ')') 
     self.set_header('Content-Type', 'application/javascript') 

其中stuff是一本字典和callback是JSONP回调名称。

0

我在这里比赛有点晚。 RequestHandler.write函数只是在写入缓冲区中创建更多块,稍后将其刷新为字符串。

class YourHandler(tornado.web.RequestHandler): 
    ... 
    def get(self, stuff): 
     self.write("callbackname(") 
     self.write(stuff) 
     self.write(")")