jquery ajax表单成功回调未被调用

Mic*_*ant 12 forms django jquery file-upload

我正在尝试使用"AJAX"上传文件,处理文件中的数据,然后将一些数据返回到UI,以便我可以动态更新屏幕.

我正在使用JQuery Ajax Form Plugin,jquery.form.js在http://jquery.malsup.com/form/找到javascript并在后端使用Django.表单正在提交,后端的处理没有问题,但是当收到服务器的响应时,我的Firefox浏览器会提示我下载/打开"application/json"类型的文件.该文件具有我一直尝试发送到浏览器的json内容.

我不相信这是我发送json的问题,因为我有一个模块化的json_wrapper()函数,我在同一个应用程序的多个地方使用.

这是我的表单在应用Django模板后的样子:

<form method="POST" enctype="multipart/form-data" action="/test_suites/active/upload_results/805/">
  <p>
     <label for="id_resultfile">Upload File:</label> 
     <input type="file" id="id_resultfile" name="resultfile">
  </p>  
</form>
Run Code Online (Sandbox Code Playgroud)

您将看不到任何提交按钮,因为我正在使用按钮调用submit其他地方并且正在使用jquery.form.js插件中的ajaxSubmit().

这是控制javascript代码:

function upload_results($dialog_box){
    $form = $dialog_box.find("form");
    var options = {
            type: "POST",
            success: function(data){
                alert("Hello!!");
            },
            dataType: "json",
            error: function(){
                console.log("errors");

            },
            beforeSubmit: function(formData, jqForm, options){
                    console.log(formData, jqForm, options);
                },
        }
    $form.submit(function(){
        $(this).ajaxSubmit(options);
        return false;
    });
    $form.ajaxSubmit(options);
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我已经迫切希望看到成功的回调函数工作,并且只是在成功时创建了一条警报消息.但是,我们从未接触过这个电话.此外,error不调用该beforeSubmit函数并执行该函数.

我得到的文件包含以下内容:

{"count": 18, "failed": 0, "completed": 18, "success": true, "trasaction_id": "SQEID0.231"}
Run Code Online (Sandbox Code Playgroud)

我在这里使用'success'来表示服务器是否能够充分运行post命令.如果失败,结果将如下所示:

{"success": false, "message":"<error_message>"}
Run Code Online (Sandbox Code Playgroud)

非常感谢您的时间和帮助.我现在已经花了几天时间,并希望继续前进.

Mic*_*ant 3

如果有人遇到类似的问题,这是我最终使用的最终 JavaScript:

function upload_results_dialog($data_elem){
    var $dialog_box = $("#ajax-dialog-box"),
    data = $data_elem.attr("data");
    $.ajax({
        url: "../upload/" + data+ "/",
        success: function(response){
            $dialog_box.html(response);
            $dialog_box.dialog("option",
                {
                    title: "Upload",
                    height: 260,
                    width: 450,
                    buttons: {
                        Cancel: function(){
                            $(this).dialog('close');
                        },
                        Upload: function(){
                            upload($(this));
                        }
                    }
                }
            );
            $dialog_box.dialog('open');
        }
    });
}
function upload($dialog_box){
    var $form = $dialog_box.find("form"),
      iframe = $dialog_box.find("iframe"),
      $html = $($iframe.contents()),
      $iframe_form = $html.find("form");
    $iframe_form.html($form.contents());

    //Set the onload function
    $iframe.attr("onload","check_file_uploaded_valid()");
    $iframe_form.submit();
}
Run Code Online (Sandbox Code Playgroud)