【发布时间】:2012-07-05 09:54:13
【问题描述】:
我正在尝试使用 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
});
};
控制台和标有“结果”的标签中都没有输出。
Edit 现在它返回 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 选项卡中打开整个响应”。
谢谢
【问题讨论】:
-
你确定在那个 ajax 帖子中没有得到 403 csrf-missing 答案吗?
-
我很确定我使用了 docs.djangoproject.com/en/1.3/ref/contrib/csrf/#csrf-ajax 中所述的 csrf 令牌 .. 无论如何 POST 的返回码是 200
-
您可以尝试在发送 HttpResponse 之前在您的视图中打印 JSON 并在您的开发服务器中进行验证。
-
@Francesco 您是否尝试过 Firebug 或 Chrome 开发人员工具来查找您收到的响应请求的数据?
-
在你的 JS 中,你想要 array 作为字符串还是字典类型?在 for 循环中分配给它看起来不像你想要的。
标签: jquery python ajax django json