【发布时间】:2012-10-12 15:57:42
【问题描述】:
遇到 JSON 无法与 Internet Explorer (IE9) 一起使用的问题。 我已经在网上搜索了很多,并尝试了不同的解决方案,但似乎没有什么对我有用。所以认为是时候创建一个 SO 帐户并提出我的第一个问题了。
我正在使用 JSON 和 jQuery/AJAX 创建一个简单的上传进度指示器 该指标在 Firefox 和 Chrome 中运行良好
这是我的视图函数:
@never_cache
@admin_required
@render_to("editor/edit_file.html")
def edit_file(request, file_id=None):
if file_id:
try:
file = Document.objects.get(pk=file_id)
form = DocumentForm(request.POST or None, files=request.FILES or None, instance=file)
except Document.DoesNotExist:
form = DocumentForm(request.POST or None, files=request.FILES or None)
else:
dir_id = request.GET.get("dir")
if dir_id:
try:
dir = Directory.objects.get(pk=dir_id)
form = DocumentForm(request.POST or None, files=request.FILES or None, initial ={"directory":dir_id, "available_to":dir.available_to})
except:
form = DocumentForm(request.POST or None, files=request.FILES or None)
else:
form = DocumentForm(request.POST or None, files=request.FILES or None)
result = {}
response = locals()
if request.method == "POST":
if form.is_valid():
file = form.save()
result["status"] = "ok"
result["href"] = reverse("portal.editor.views.files_list", args=[file.directory.pk])
if not request.is_ajax():
response = HttpResponseRedirect(reverse("portal.editor.views.files_list", args=[file.directory.pk]))
else:
result[status] = "error"
if request.is_ajax():
response = HttpResponse(json.dumps(result), mimetype="text/plain")
add_never_cache_headers(response)
return response
这是我的 jQuery 代码:
if ($("#id_edit_form").length > 0) {
$("#id_edit_form").ajaxForm({
type: "POST",
cache: false,
dataType: "json",
beforeSubmit: function (formData, jqForm, options) {
$("#id_overlay").height($(document).height()).show();
},
success: function (response, status, xhr, $form) {
$("#id_overlay").hide();
if (status === "success") {
if (response.status === "ok") {
location.href = response.href;
} else if (response.status === "error") {
for (var item in response.form) {
$("#id_" + item).parent("p").next("p.js_form-error").html(response.form[item][0]);
}
} else { alert(response.result); }
} else { alert("Error status:", status); }
}
});
}
我觉得我已经尝试了一切。还尝试将 mimetype 更改为“text/plain”,但仍然无效。 我在 nginx 服务器上使用 Django 1.3、Python 2.6 和 jQuery 1.6.1。
nginx/mime.types 中的 mimetype 怎么样?我应该在这个文件中添加 json 吗? 我真的需要帮助,因为我一直因为这个问题而头疼!
提前致谢
【问题讨论】:
-
请说明您观察到的具体内容(控制台中的错误消息等)。此外,您发布的 Python 代码在语法上无效,无法按原样工作。
-
您应该发布您的解决方案作为答案并接受它。
-
这不是我修复的问题本身,而是 Vasily 提到的语法错误
-
你还没有描述你的问题。你说“它仍然没有工作”,但这是什么意思?您的代码有很多可能“不起作用”的方式。
-
我似乎在 Fiddler 中找不到问题(也许我只是不知道去哪里找)。当用户上传文件时,会显示一个覆盖,直到上传完成。这在 Firefox 中运行顺利。然而,在 IE 中,覆盖在浏览器中“挂起”,这意味着它不会从 django 视图接收 JSON。模型已创建,文件已上传,但您必须刷新页面才能再次浏览。我已要求开发人员调查 Fiddler 中的错误。也许他能找到问题。
标签: jquery python django json internet-explorer-9