无法通过django Web应用程序返回json响应

时间:2012-07-05 09:54:14

标签: jquery python ajax django json

我正在尝试使用django为ajax请求返回json响应。 Json响应是序列化的python字典。我确信该字典包含足够的数据,但它不会到达客户端。 服务器端我有这个python例程:

def routine(request):
    response_dict = {}
    f = open("output.txt", "r")
    for line in f:
        line.strip('\n ')
        (key, val) = line.split('\t')
        if re.search("^[a-zA-Z][a-zA-Z0-9]*$", key) != None:
            if re.search("^[0-9]+$", val) != None:
                response_dict[key] = val
    f.close()
    json_response = json.dumps(response_dict)
    return HttpResponse(json_response, mimetype='application/json')

客户端我有这个javascript + jQuery例程(以下编辑,见该版本):

$.postJSON('ajax/routine', '', function(data) 
      {
        console.debug(data);
        console.debug(data.result);
        $("#result").html(data.result);
      });

postJSON是一个执行POST ajax请求的jQuery插件,代码如下:

$.postJSON = function(url, data, callback) {
    return jQuery.ajax({
    'type': 'POST',
    'url': url,
    'contentType': 'application/json',
    'data': JSON.stringify(data),
    'dataType': 'json',
    'success': callback
    });
};

在控制台和用“result”标识的标签中都没有输出任何输出。

编辑现在它返回200 Http状态代码,124返回data.result。在我调试的服务器中,json.dumps完美运行。

Edit2 我编辑了我的jQuery / javascript代码:

$.postJSON('ajax/routine', '', function(data) 
      {
        array = {};
        for(key in data)
          {
            array = key + " " + data[key];
          }
        $("#result").html(array);
      });

我在Firebug下进行了测试,响应到达客户端,但是:1)小阵列(1个元素)打印出来2)响应让我崩溃Chromium开发人员工具和Firebug(当打开JSON选项卡时,响应选项卡我只收到一条响应,并显示消息“已达到Firebug响应大小限制。单击此处以在新的Firefox选项卡中打开整个响应”。

由于

2 个答案:

答案 0 :(得分:2)

$.postJSON是关于POST数据的,这不是你需要的,因为你显然没有发布任何东西(并且不处理在你的视图中发布的任何东西)。使用$.getJSON可能是第一件事(http://api.jquery.com/jQuery.getJSON/)。这也可以避免使用django的csrf令牌

答案 1 :(得分:0)

问题在于javascript代码..我可以改用它:

$.postJSON('ajax/routine', '', function(data) 
      {
        for(key in data)
            $("#result").html($("#result").html() + " " + key + " " + data[key]);
      });

然而,这是有效的,但它是错误的,肯定不聪明,因为要处理的大量数据导致页面挂起(#result innerHtml更新48612次)。 所以我想使用webWorker来做这个或者保存数据而不是在html中显示它。

感谢所有