使用Python/Django获取jQuery getJSON输出

0 投票
1 回答
2747 浏览
提问于 2025-04-16 08:48

我正在尝试使用 jQuery 的 .getJSON 方法,向我本地的 Python/Django 服务器发起一个简单的请求。使用的地址是:

http://localhost:8000/api/0.1/tonight-mobile.json?callback=jsonp1290277462296

我想写一个简单的网页视图,可以访问这个网址并返回一个 JSON 数据包(关于具体的元素值和布局我稍后再考虑)。

这是我简单尝试的代码,用来弹出或返回数据:

$.getJSON("http://localhost:8000/api/0.1/tonight-mobile.json&callback=?",
function(json){
    alert(json);
    <!--$.each(json.items, function(i,item){
    });-->
});

我可以直接访问这个网址,无论是 http://localhost:8000/api/0.1/tonight-mobile.json 还是 http://localhost:8000/api/0.1/tonight-mobile.json&callback=jsonp1290277462296,都能得到一个有效的 JSON 数据包……所以我猜问题出在我的初学者 JavaScript 上 :)

生成这个响应的 views.py 函数如下:

def tonight_mobile(request):
    callback = request.GET.get('callback=?', '')    

    def with_rank(rank, place):
        return (rank > 0)

    place_data = dict(
        Places = [make_mobile_place_dict(request, p) for p in Place.objects.all()]
    )

    xml_bytes = json.dumps(place_data)
    xml_bytes = callback + '(' + xml_bytes + ');'

    return HttpResponse(xml_bytes, mimetype="application/json")

以及相应的 urls.py 配置:

(r'^tonight-mobile.json','iphone_api.views.tonight_mobile'),

我对如何使用回调函数还有些困惑,可能这就是我遇到问题的地方。请注意,我可以直接调用一个 'blah.json' 文件并得到响应,但通过一个固定的 URL 却不行。有人能给我一些指导吗?

1 个回答

0

首先,callback = request.GET.get('callback=?', '') 这个写法不会得到 callback 的值。

callback = request.GET.get( 'callback', None ) 

这样做效果会好很多。

要调试这种情况,你可以在你的 Django 视图函数里加一些 print 语句,这样你就能看到发生了什么。例如:在视图函数里加上 print repr(request.GET),这样可以帮助你查看 GET 请求的字典内容。

撰写回答