2

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 吗?我真的需要帮助,因为我一直因为这个问题而头疼!

提前致谢

4

2 回答 2

0

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

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

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

于 2012-11-20T20:10:54.757 回答
0

仅供参考,当我升级到 Django 1.5 时,这个错误就消失了。

似乎 django 1.3 在 mimetypes/content-types 和 JSON 上有一些问题(现在我也使用内置的 json 而不是 simplejson)

于 2013-08-04T22:00:34.103 回答