代码之家  ›  专栏  ›  技术社区  ›  Michael Merchant

未调用jquery ajax表单成功回调

  •  12
  • Michael Merchant  · 技术社区  · 16 年前

    我使用的是jqueryajax表单插件,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>
    

    您将看不到任何提交按钮,因为我在调用submit时使用了按钮else where,并且使用了jquery.form.js插件。

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

    error 函数未被调用 beforeSubmit 函数被执行。

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

    {"count": 18, "failed": 0, "completed": 18, "success": true, "trasaction_id": "SQEID0.231"}
    

    我在这里使用“success”来表示服务器是否能够充分运行post命令。如果失败,结果将类似于:

    {"success": false, "message":"<error_message>"}
    

    非常感谢您的时间和帮助。我已经花了几天时间在这上面了,我很想继续。

    4 回复  |  直到 16 年前
        1
  •  3
  •   JD0000    15 年前

    好吧,我花了几个小时来处理这个问题,一行一行地检查js文件。它工作了一秒钟,然后下一秒钟就不工作了。我的问题是-我删除了结果的目标div。一旦我把它放回去,效果就很好了。

        2
  •  3
  •   Michael Merchant    15 年前

    如果有人遇到类似的问题,下面是我最终使用的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();
    }
    
        3
  •  2
  •   Jeff Borden    14 年前

    return Json(new {Id = group.Id, Name = group.Name});
    
        4
  •  0
  •   Luis Aguilar    15 年前

    你需要打电话 $('#form-id').ajaxForm(); 在documentready jQuery事件中,以便插件注册所有事件处理程序。