您的位置:首页 > Web前端 > JavaScript

Tornado 支持JSONP的请求封装

2013-12-31 12:04 429 查看
由于JSONP强大的跨域访问功能,发现tornado没有对jsonp的默认支持,还好tornado是开源的,就简单实现了一个JSONPHandler,对一切JSONP请求进行封装。

对于jsonp跨域见上一篇文章

tornado对于jsonp的封装主要在finish的时候返回的json是对前端页面js的调用

import json
from functools import wraps

def jsonp(func):
"Wraps JSONfiled output for JSONP requests."
@wraps(func)
def decorated_func(*args, **kwargs):
# First argument always be the requestHandler
requestHandler = args[0]
callback = requestHandler.get_argument('callback', False)

data = json.dumps(func(*args, **kwargs))
content = str(callback) + '(' + data + ')' if callback else data

requestHandler.write(content)
requestHandler.finish()

return decorated_func


在tornado中可是直接使用函数修饰,对返回的数据做jsonp的处理

from tools import jsonp

class AnalyzeDomainIp(tornado.web.RequestHandler):
@jsonp
def get(self, collection='todayDomain', domain=''):
return datacenter.get_domain_detail_ip(collection, domain)


前端的请求
$.getJSON('http://www.server.com:8081/jsonp/helloword?jsonp=?', function(data) {
$('#get-console').html(data['josnp-get']);
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: