【问题标题】:django - JSON Response to jQuerydjango - 对 jQuery 的 JSON 响应
【发布时间】:2011-03-22 13:53:02
【问题描述】:

我正在尝试将这两部分粘合在一起,我什至不知道问题出在哪里,没有 alert() 并且 firebug 没有告诉我任何信息。

// django with yellow api to find_business search:
// ----------------------

def get_yellow(request):
   mimetype = 'application/json'
   yapi = YellowAPI(settings.YELLOW_API_KEY, test_mode=True, format='JSON', handlers=[])
   data = yapi.find_business(what='403-253-0395', where='Calgary', uid='127.0.0.1')
   print data #I can see here there is a result
   return HttpResponse(data,mimetype)

// jQuery 
// ----------------------

$(document).ready(function(){
    $.getJSON('http://myserver:8000/get_yellow/', 
    function(data) {
        alert('Fetched ' + data.length + ' items!');
    })

});

// I'm including a full response on a simple call, is this a valid json?
// ----------------------

{"summary":{"what":"403-253-0395","where":"Calgary","latitude":"","longitude":"","firstListing":1," lastListing":1,"totalListings":1,"pageCount":1,"currentPage":1,"listingsPerPage":40},"listings":[{"parentId":"","isParent":false,"距离":"","内容":{"视频":{"avail":false,"inMkt":false},"照片":{"avail":false,"inMkt":false},"Profile" :{"avail":false,"inMkt":false},"DspAd":{"avail":false,"inMkt":false},"Url":{"avail":false,"inMkt":false} ,"Logo":{"avail":false,"inMkt":false}},"id":"1931218","name":"Future Shop","address":{"street":"1180-33 Heritage Meadows Way SE","city":"Calgary","prov":"AB","pcode":"T2H3B8"},"geoCode":{"latitude":"50.987988","longitude":"- 114.04424"}}]}

【问题讨论】:

  • 你在 Django 主机上运行 JavaScript?

标签: jquery django json response


【解决方案1】:

您的 javascript 中有语法错误。你少了一个分号。应该是:

$(document).ready(function(){
    $.getJSON('http://myserver:8000/get_yellow/', 
    function(data) {
        alert('Fetched ' + data.length + ' items!');
    });
});

另外,如果您只是在寻找调试 api 代码的方法,只需在当前浏览器的地址栏中输入 url (http://myserver:8000/get_yellow/)。在尝试使用 javascript 调用它之前,您可能应该先执行此操作。

更新:

如果这不是跨浏览器请求,您的调用应如下所示:

$(document).ready(function(){
    $.getJSON('get_yellow/', 
    function(data) {
        alert('Fetched ' + data.length + ' items!');
    });
});

如果是跨浏览器请求,应该使用jsonp代替:

$(document).ready(function(){
    $.ajax({
       type: "GET",
       url: "http://myserver:8000/get_yellow/",
       dataType: "jsonp",
       success: function(data) {
           alert('Fetched ' + data.length + ' items!');
       }
     });
});

【讨论】:

  • @Spike 我确实在浏览器中输入了 url,这就是我得到上面附加的输出的方式。我修了分号,还是不行?
  • 嗯。我刚刚更新了我的答案以解决我注意到的另一个可能的问题。
  • @Spike 是跨浏览器,jquery在我本地机器上,django服务器在不同机器上
  • @Spike 原始 jquery 脚本直接来自《JQuery from Novice to Ninja》一书,跨浏览器调用feeds.delicious.com/v2/json/tag/celebs?callback=?'它可以工作,但我的电话无论如何都不起作用。我已经编辑了我的问题以包含来自 Yellowapi 的完整输出
  • 既然是跨浏览器,你试过用jsonp吗?以下是更多信息的链接:stackoverflow.com/questions/2067472/please-explain-jsonp
【解决方案2】:

调用 $.getJSON() 后缺少分号。技术上不需要,但我已经看到没有它们的 javascript 行为很奇怪。当您使用浏览器点击http://myserver:8000/get_yellow/ 时会发生什么?你看到 JSON 了吗?

您提供的示例 JSON 在我在末尾添加了一个“]}”后在 JSONLint 中验证(我假设这不是完整的响应。您确定它有效吗?来自 getJSON() 的 jQuery API :

从 jQuery 1.4 开始,如果 JSON 文件 包含语法错误,请求 通常会默默地失败

【讨论】:

    【解决方案3】:

    从视图上看,我总是使用以下代码将数据推送到 javascript,并且效果很好。数据可以是json格式,也可以不是json格式,先试试下面这个简单的case,看数据是否推送到javascript:

    from django.utils import simplejson
    
    def get_yellow(request):
        colours = ['red', 'blue', 'yellow']
        data = simplejson.dumps(colours)
        return HttpResponse(data, mimetype='application/javascript')
    

    如果您可以通过 javascript 提醒上述值,请在您的代码中尝试以下操作:

    def get_yellow(request):
       yapi = YellowAPI(settings.YELLOW_API_KEY, test_mode=True, format='JSON', handlers=[])
       data = yapi.find_business(what='403-253-0395', where='Calgary', uid='127.0.0.1')
       return HttpResponse(simplejson.dumps(data), mimetype='application/javascript')
    

    【讨论】:

    • 使用上面的例子,什么是 jquery 代码来提取例如红色?
    猜你喜欢
    • 2020-12-25
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    相关资源
    最近更新 更多