代码之家  ›  专栏  ›  技术社区  ›  Steven

有没有人有一个关于如何使用jquery表单上传的好例子/教程?

  •  4
  • Steven  · 技术社区  · 14 年前

    测试后 AjaxFileUpload Plugin 我发现它不让我找回 $_POST 数据,因为插件只提交 $_FILE 数据。因此,我转向jquery表单插件,它记录在这里: http://www.malsup.com/jquery/form/#file-upload

    不幸的是,我觉得这个例子很糟糕,对我没有帮助。我需要使用iframe来防止页面重新加载。

    有人使用jquery表单插件使用iframe上传文件时,有没有工作代码og链接到god教程?

    我知道还有其他文件上传插件,但我想使用这个项目。

    更新
    这是我目前使用的代码。它所做的只是重新连接页面,我没有得到输出/警报。

    HTML

    <form id="uploadForm" enctype="multipart/form-data" action=""  method="POST">
        <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
        <input type="hidden" id="current_path" name="current_path" value="<?php echo $fb->relative_url; ?>" />
        <input id="uploadFile" name="uploadFile" type="file" />
        <input type="submit" class="button uploadImage" value="<?php _e('Upload File') ?>" /> <br /> 
    </form>
    

    javascript

    var options = {
        beforeSubmit:   function() { alert('before');},
        success:        function(html) { alert('success + ' + html);},
        data:           {current_path: jQuery('#currentPath span').html()},
        url:            '../wp-content/plugins/wp-filebrowser/uploader.php',
        iframe:         true,
        dataType:       'html'
    };
    
    jQuery('#uploadForm').submit(function() {
        jQuery(this).ajaxSubmit(options);
        return false;
    });
    

    我也试过这个JS

    jQuery('#uploadForm').ajaxForm({
        beforeSubmit:   function() { alert('before');},
        success:        function(html) { alert('success + ' + html);},
        data:           {current_path: jQuery('#currentPath span').html()},
        url:            '../wp-content/plugins/wp-filebrowser/uploader.php',
        dataType:       'html'
    });
    

    但我的页面仍然只会重新加载,不会触发警报:(

    调试

    在我的JS文件中运行以下脚本: alert(jQuery('#uploadForm').ajaxForm); 给了我这个输出:

    function (options) {
        if (this.length === 0) {
            var o = {s: this.selector, c: this.context};
            if (!jQuery.isReady && o.s) {
                log("DOM not ready, queuing ajaxForm");
                jQuery(function () {jQuery(o.s, o.c).ajaxForm(options);});
                return this;
            }
            log("terminating; zero elements found by selector" + (jQuery.isReady ? "" : " (DOM not ready)"));
            return this;
        }
        return this.ajaxFormUnbind().bind("submit.form-plugin", function (e) {if (!e.isDefaultPrevented()) {e.preventDefault();
    jQuery(this).ajaxSubmit(options);}}).bind("click.form-plugin", function (e) {var target = e.target;
    var jQueryel = jQuery(target);
    if (!jQueryel.is(":submit,input:image")) {var t = jQueryel.closest(":submit");
    if (t.length == 0) {return;}target = t[0];}var form = this;
    form.clk = target;
    if (target.type == "image") {if (e.offsetX != undefined) {form.clk_x = e.offsetX;
    form.clk_y = e.offsetY;} else if (typeof jQuery.fn.offset == "function") {var offset = jQueryel.offset();
    form.clk_x = e.pageX - offset.left;
    form.clk_y = e.pageY - offset.top;} else {form.clk_x = e.pageX - target.offsetLeft;form.clk_y = e.pageY - target.offsetTop;}}setTimeout(function () {form.clk = form.clk_x = form.clk_y = null;}, 100);});
    }
    

    从调试来看,当我运行此脚本时,表单似乎没有完成加载。这很奇怪,因为我在里面 jQuery(document).ready() .

    4 回复  |  直到 12 年前
        1
  •  3
  •   toadalee    13 年前

    需要绑定提交事件

     // bind form using 'ajaxForm' 
       // bind to the form's submit event 
        $('#myForm1').submit(function() { 
            // inside event callbacks 'this' is the DOM element so we first 
            // wrap it in a jQuery object and then invoke ajaxSubmit 
            $(this).ajaxSubmit(options); 
    
            // !!! Important !!! 
            // always return false to prevent standard browser submit and page navigation 
            return false; 
        });
    
        2
  •  1
  •   fearofawhackplanet    14 年前

    如果你能更具体地知道你需要做什么,这会有所帮助。我以前使用过这个插件,所以可以举一个简单的例子。

    不需要iframe来阻止页面重新加载。我同意文档相当糟糕,我不太了解iframe位,但发现没有它对我很有用。

    <% using (Html.BeginForm("UploadDocument", "Documents", 
                   new { wo = ViewContext.RouteData.Values["id"] },
                   FormMethod.Post, 
                   new { enctype = "multipart/form-data", @class="attachDocumentsForm" }))
            {%>
                <input type="file" name="fileInput" class="attachDocumentFileInput" size="100"/>
                <input type="submit" class="attachDocumentsSubmit" value="Upload file" />       
                <input type="button" class="attachDocumentsCancel" value="Cancel" />       
            <% } %>    
    
    
    $documentsForm.ajaxForm({
            dataType: 'json',
            beforeSubmit: function() {
                // ...
            },
            success: function(data) {
                if (data) {
                    // ...
                }
                else {
                    alert('Error uploading document. Upload failed.');
                }
            }
        });
    

    希望有帮助。

        3
  •  0
  •   Steven    13 年前

    我最后用了 Uploadify .

    要使此代码正常工作,我使用以下脚本:

      /*  Brand logo uploadify
      -----------------------------------------------------------------------------*/    
      function uploadifyBrandLogo()
      {
    
              //Get brand ID because loading uploadify.php triggers a new session
              var brand_id = jQuery('#brand_id').val();
    
              jQuery("#brand_btnBrowseLogo").uploadify({
                'uploader'       : siteURL + '/wp-content/plugins/uploadify/uploadify.swf',
                'script'         : siteURL + '/wp-content/plugins/uploadify/uploadify.php',
                'fileExt'        : '*.jpg;*.jpeg;*.png',
                'auto'           : true,
                'multi'          : false,
                'method'         : 'POST',
                'height'         : '29',
                'width'          : '136',
                'buttonImg'      : siteURL + '/wp-content/themes/storelocator/img/buttons/img_upload_grey_bg.png',
                'cancelImg'      : siteURL + '/wp-content/plugins/uploadify/cancel.png', 
                'scriptData'     : {'var1':'data1','var2':data2},
                'onComplete'     : function(event, queueID, fileObj, response, data) { 
                   // Do stuff here
                   }
    
                  // Show upload feedback
                  showFeedback(result.feedback);                    
                }
              });
      }
    
        4
  •  0
  •   markp3rry    12 年前