我正在尝试使用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选项卡中打开整个响应”。
由于
答案 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中显示它。
感谢所有