Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用FormData进行AJAX文件上载?_Javascript_Jquery_Ajax_File Upload - Fatal编程技术网

Javascript 如何使用FormData进行AJAX文件上载?

Javascript 如何使用FormData进行AJAX文件上载?,javascript,jquery,ajax,file-upload,Javascript,Jquery,Ajax,File Upload,这是我使用拖放功能动态生成的HTML <form method="POST" id="contact" name="13" class="form-horizontal wpc_contact" novalidate="novalidate" enctype="multipart/form-data"> <fieldset> <div id

这是我使用拖放功能动态生成的HTML

<form method="POST" id="contact" name="13" class="form-horizontal wpc_contact" novalidate="novalidate" enctype="multipart/form-data">
<fieldset>
    <div id="legend" class="">
        <legend class="">file demoe 1</legend>
        <div id="alert-message" class="alert hidden"></div>
    </div>

    <div class="control-group">
        <!-- Text input-->
        <label class="control-label" for="input01">Text input</label>
        <div class="controls">
            <input type="text" placeholder="placeholder" class="input-xlarge" name="name">
            <p class="help-block" style="display:none;">text_input</p>
        </div>
        <div class="control-group">  </div>
        <label class="control-label">File Button</label>

        <!-- File Upload --> 
        <div class="controls">
            <input class="input-file" id="fileInput" type="file" name="file">
        </div>
    </div>
    <div class="control-group">    

        <!-- Button --> 
        <div class="controls">
            <button class="btn btn-success">Button</button>
        </div>
    </div>
</fieldset>
</form> 

文件演示1
文本输入
文本输入

文件按钮 按钮
这是我的JavaScript代码:

<script>
    $('.wpc_contact').submit(function(event){
        var formname = $('.wpc_contact').attr('name');
        var form = $('.wpc_contact').serialize();               
        var FormData = new FormData($(form)[1]);

        $.ajax({
            url : '<?php echo plugins_url(); ?>'+'/wpc-contact-form/resources/js/tinymce.php',
            data : {form:form,formname:formname,ipadd:ipadd,FormData:FormData},
            type : 'POST',
            processData: false,
            contentType: false,
            success : function(data){
            alert(data); 
            }
        });
   }

$('.wpc_contact')。提交(函数(事件){
var formname=$('.wpc_contact').attr('name');
var form=$('.wpc_contact').serialize();
var FormData=新FormData($(表格)[1]);
$.ajax({
url:''+'/wpc联系人表单/resources/js/tinymce.php',
数据:{form:form,formname:formname,ipadd:ipadd,FormData:FormData},
键入:“POST”,
processData:false,
contentType:false,
成功:功能(数据){
警报(数据);
}
});
}

要正确使用表单数据,需要执行两个步骤

准备工作

您可以将整个表单交给FormData()进行处理

var form = $('form')[0]; // You need to use standard javascript object here
var formData = new FormData(form);
或指定FormData()的精确数据

发送表单

带有jquery的Ajax请求如下所示:

$.ajax({
    url: 'Your url here',
    data: formData,
    type: 'POST',
    contentType: false, // NEEDED, DON'T OMIT THIS (requires jQuery 1.6+)
    processData: false, // NEEDED, DON'T OMIT THIS
    // ... Other options like success and etc
});
在此之后,它将发送ajax请求,就像您使用
enctype=“multipart/form data”提交常规表单一样

更新:如果没有选项中的
键入:“POST”
,此请求将无法工作,因为所有文件都必须通过POST请求发送


注意:
contentType:false
仅可用

我无法在上面添加评论,因为我没有足够的声誉,但上面的答案对我来说几乎完美,除非我必须添加

类型:“职位”

对于.ajax调用。我搔了几分钟的头,试图找出我做错了什么,这就是它所需要的一切,并且起到了效果。因此,这是整个片段:

完全归功于我上面的答案,这只是一个小小的调整。这只是为了防止其他人陷入困境,看不到显而易见的东西

  $.ajax({
    url: 'Your url here',
    data: formData,
    type: "POST", //ADDED THIS LINE
    // THIS MUST BE DONE FOR FILE UPLOADING
    contentType: false,
    processData: false,
    // ... Other options like success and etc
})

这两种方法都可以使用。

查看:
$(document).ready(function () {
    $(".submit_btn").click(function (event) {
        event.preventDefault();
        var form = $('#fileUploadForm')[0];
        var data = new FormData(form);
        data.append("CustomField", "This is some extra data, testing");
        $("#btnSubmit").prop("disabled", true);
        $.ajax({
            type: "POST",
            enctype: 'multipart/form-data',
            url: "upload.php",
            data: data,
            processData: false,
            contentType: false,
            cache: false,
            timeout: 600000,
            success: function (data) {
                console.log();
            },
        });
    });
});
进口 $(文档).ready(函数(){ $(文档).on('change',':file',函数(){ var fileUpload=$(this).get(0); var files=fileUpload.files; var bid=0; 如果(files.length!=0){ var data=new FormData(); 对于(var i=0;i
实际上,文档显示您可以使用
XMLHttpRequest().send()
只需发送多种形式的数据 以防jquery很糟糕

早上好

我在上传多张图片时遇到了同样的问题。解决方案比我想象的要简单:在名称字段中包含[]



我没有对FormData进行任何修改。

最好使用本机javascript按id查找元素,如:document.getElementById(“yourFormElementID”)


我可以设置“enctype”吗在Ajax调用中?我想我可能有问题。或者,我可以在FormData对象上设置它吗?你可以。为此,请参见在我的代码中上载文件时必须执行的操作后面的行。@拼写如何在控制器中获取数据?是否需要发送
getCsrfToken
?@ЮЮЮЮСЮЮЮЮСЮЮЮЮЮЮ107前端控制器?您试图在这里解决CSRF保护问题吗?@ManthanJamdagni当您获得
$('form')
时,它将返回jQuery对象。但是我们这里需要常规js对象,而不需要jQuery功能。这就是为什么我们获得带有
[0]
符号的常规对象。您可以调用
document.getElementById来代替此构造()
或simular调用。您应该阅读
formData()中的
append方法有一个可选的文件第三个参数。提供解释和答案通常被认为是好的形式。这与问题所问的问题无关,只是PHP如何处理具有相同名称的多个值的表单数据的一个特点。如果我们得到的是id为的dom,为什么我们需要像$(#formId)[0]一样键入0零?
<form id="upload_form" enctype="multipart/form-data">
var formData = new FormData($('#upload_form')[0]);

formData.append('tax_file', $('input[type=file]')[0].files[0]);

$.ajax({
    type: "POST",
    url: base_url + "member/upload/",
    data: formData,
    //use contentType, processData for sure.
    contentType: false,
    processData: false,
    beforeSend: function() {
        $('.modal .ajax_data').prepend('<img src="' +
            base_url +
            '"asset/images/ajax-loader.gif" />');
        //$(".modal .ajax_data").html("<pre>Hold on...</pre>");
        $(".modal").modal("show");
    },
    success: function(msg) {
        $(".modal .ajax_data").html("<pre>" + msg +
            "</pre>");
        $('#close').hide();
    },
    error: function() {
        $(".modal .ajax_data").html(
            "<pre>Sorry! Couldn't process your request.</pre>"
        ); // 
        $('#done').hide();
    }
});
var form = $('form')[0]; 
var formData = new FormData(form);     
formData.append('tax_file', $('input[type=file]')[0].files[0]);
var formData = new FormData($('#upload_form')[0]);
formData.append('tax_file', $('input[type=file]')[0].files[0]); 
View:
<label class="btn btn-info btn-file">
Import <input type="file" style="display: none;">
</label>
<Script>
$(document).ready(function () {
                $(document).on('change', ':file', function () {
                    var fileUpload = $(this).get(0);
                    var files = fileUpload.files;
                    var bid = 0;
                    if (files.length != 0) {
                        var data = new FormData();
                        for (var i = 0; i < files.length ; i++) {
                            data.append(files[i].name, files[i]);
                        }
                        $.ajax({
                            xhr: function () {
                                var xhr = $.ajaxSettings.xhr();
                                xhr.upload.onprogress = function (e) {
                                    console.log(Math.floor(e.loaded / e.total * 100) + '%');
                                };
                                return xhr;
                            },
                            contentType: false,
                            processData: false,
                            type: 'POST',
                            data: data,
                            url: '/ControllerX/' + bid,
                            success: function (response) {
                                location.href = 'xxx/Index/';
                            }
                        });
                    }
                });
            });
</Script>
Controller:
[HttpPost]
        public ActionResult ControllerX(string id)
        {
            var files = Request.Form.Files;
...
$('#form-withdraw').submit(function(event) {

    //prevent the form from submitting by default
    event.preventDefault();



    var formData = new FormData($(this)[0]);

    $.ajax({
        url: 'function/ajax/topup.php',
        type: 'POST',
        data: formData,
        async: false,
        cache: false,
        contentType: false,
        processData: false,
        success: function (returndata) {
          if(returndata == 'success')
          {
            swal({
              title: "Great",
              text: "Your Form has Been Transfer, We will comfirm the amount you reload in 3 hours",
              type: "success",
              showCancelButton: false,
              confirmButtonColor: "#DD6B55",
              confirmButtonText: "OK",
              closeOnConfirm: false
            },
            function(){
              window.location.href = '/transaction.php';
            });
          }

          else if(returndata == 'Offline')
          {
              sweetAlert("Offline", "Please use other payment method", "error");
          }
        }
    });



}); 
<input type="file" name="files[]" multiple>
$(document).ready(function () {
    $(".submit_btn").click(function (event) {
        event.preventDefault();
        var form = $('#fileUploadForm')[0];
        var data = new FormData(form);
        data.append("CustomField", "This is some extra data, testing");
        $("#btnSubmit").prop("disabled", true);
        $.ajax({
            type: "POST",
            enctype: 'multipart/form-data',
            url: "upload.php",
            data: data,
            processData: false,
            contentType: false,
            cache: false,
            timeout: 600000,
            success: function (data) {
                console.log();
            },
        });
    });
});
$.ajax( {
      url: "http://yourlocationtopost/",
      type: 'POST',
      data: new FormData(document.getElementById("yourFormElementID")),
      processData: false,
      contentType: false
    } ).done(function(d) {
           console.log('done');
    });