Skip to main content
 首页 » 编程设计

jquery之Django:JSON 和 Internet Explorer 问题

2025年05月04日30虾米哥

JSON 无法与 Internet Explorer (IE9) 一起使用时遇到问题。 我在网上搜索了很多,并尝试了不同的解决方案,但似乎对我没有任何帮助。所以认为是时候创建一个 SO 帐户并提出我的第一个问题了。

我正在使用 JSON 和 jQuery/AJAX 创建一个简单的上传进度指示器 该指示器在 Firefox 和 Chrome 中工作正常

这是我的 View 函数:

@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 吗? 我真的需要这方面的帮助,因为这个问题让我伤透了脑筋!

提前致谢

请您参考如下方法:

语法错误可能是最后一个逗号

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); 
        }, 

最后一个逗号。 IE 对这些东西非常挑剔。

我阅读了一些有关您正在使用的 ajaxForm 的资料。这是:http://malsup.com/jquery/form/ ?在我看来,您可以更轻松地使用它或完全忘记它并像这样使用 jquery ajax:

$('a.submit').live('click', function(event){ 
    event.preventDefault(); 
    var f = $(this).parents('form'); 
    data = f.serialize(); 
    if (contactIsWorking == false){ 
        $.ajax({ 
            'type':'POST', 
            'url': '/contactform/', 
            'data': data, 
            'datatype':'json', 
            'beforeSend':function(){ 
                contactIsWorking = true; 
            }, 
            'success':function(data, textStatus){ 
                postHandler(f, data); 
            }, 
            'error':function(jqXHR, textStatus, errorThrown){ 
 
            }, 
            'timeout':function(data){ 
            }, 
            'complete':function(data){ 
                contactIsWorking = false; 
                spinner.fadeOut(500); 
            } 
        }); 
    } 
}); 

从我的一个项目中快速获取这段代码 - 它可能有太多信息,但我想你可以过滤掉需要的内容