Jquery django web应用程序无法返回json响应

Jquery django web应用程序无法返回json响应,jquery,python,ajax,django,json,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'

我试图用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是一个执行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
    });
};
在控制台或用“结果”标识的标记中都没有写入输出

编辑现在它返回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选项卡中打开整个响应”


谢谢

$。postJSON
是关于发布数据的,这不是您在这里需要的,因为您显然没有发布任何内容(也不处理视图中发布的任何内容)。使用
$。getJSON
可能是第一件要做的事情(http://api.jquery.com/jQuery.getJSON/)。这也可以避免django的csrf令牌出现任何问题。

问题出在javascript代码上。。我可以改用它:

$.postJSON('ajax/routine', '', function(data) 
      {
        for(key in data)
            $("#result").html($("#result").html() + " " + key + " " + data[key]);
      });
然而,这是可行的,但它是错误的,肯定不是明智的,因为要处理的大量数据会导致页面挂起(result innerHtml更新48612次)。 所以我想用webWorker来做这件事,或者让它保存数据,而不是在html中显示数据


感谢大家

你确定在那篇ajax文章中没有得到403 csrf遗漏的答案吗?我非常确定我使用了中所述的csrf令牌。无论如何,文章的返回代码是200。你可以在发送HttpResponse之前在视图中打印JSON,并在开发服务器中进行验证。@Francesco你尝试过Firebug或Chrome developer工具来查找吗您在响应请求时收到了哪些数据?在JS中,您希望数组为字符串或dict类型?在for循环中分配给它的内容与您的不一样。我同意您的意见,即使我必须在本例的下一步发布数据。顺便说一句,使用getJSON,结果是相同的..与什么相同?使用浏览器或curl/wget查询URL-有什么作用这会给你带来什么?它应该显示什么?在你的视图中放置一个print语句来打印返回的json对象-将其与你的客户看到的对象进行比较。如果这没有揭示问题,那么编辑你的问题,显示视图返回的数据与你的客户说它正在接收的数据进行比较。谢谢@scytale..我找到了一个解决方案.我通过wget获得json并将字典打印到服务器中的一个文件中,我无法在这里发布这些文件,因为它们太大(48612对-键/值)…但是结果是:-两个文件都包含所有键-javascript代码有问题..我将在下面发布
$.postJSON('ajax/routine', '', function(data) 
      {
        for(key in data)
            $("#result").html($("#result").html() + " " + key + " " + data[key]);
      });