2015-05-21 107 views
0

我目前正试图解决一个问题。 我在单个页面上有几种形式,通过ajax异步发送到后端。jQuery的AJAX文件上传

现在他们中的一些需要有一个文件上载不会破坏进程,所以它可以异步处理。

我想弄明白这样的:

// Allgemein Submit 
    $allgSubmit.click(function(){ 
     event.preventDefault(); 
     var gehrKundennummer = $('#gehrKundennummer').val(); 
     var kundenklasse = $("input[type='radio'][name='kundenklasse']:checked").val(); 
     var lkw12t = $('#lkw12t').val(); 
     var lkw3t = $('#lkw3t').val(); 
     var autobus = $('#autobus').val(); 
     var firmenname1 = $('#firmenname1').val(); 
     var firmenname2 = $('#firmenname2').val(); 
     var uidnummer = $('#uidnummer').val(); 
     var peselregon = $('#peselregon').val(); 
     var firmenart = $('#firmenart option:selected').val(); 
     var strasse = $('#strasse').val(); 
     var ort = $('#ort').val(); 
     var plz = $('#plz').val(); 
     var land = $('#land').val(); 
     var fd = new FormData(); 
     var file = fd.append('file', $('#allg_firmen_dok').get(0).files[0]); 

     var allgArray = { 
      'gehrKundennummer':gehrKundennummer, 
      'kundenklasse':kundenklasse, 
      'lkw12t':lkw12t, 
      'lkw3t':lkw3t, 
      'autobus':autobus, 
      'firmenname1':firmenname1, 
      'firmenname2':firmenname2, 
      'uidnummer':uidnummer, 
      'peselregon':peselregon, 
      'firmenart':firmenart, 
      'strasse':strasse, 
      'ort':ort, 
      'plz':plz, 
      'land':land, 
      'file':file 
     }; 

     //var data = new FormData(); 
     //jQuery.each(jQuery('#allg_firmen_dok')[0].files, function(i, file) { 
      // data.append('file-'+i, file); 
     //}); 

     console.log(allgArray); 
     $.ajax({ 
      url: "PATHTOFILE/logic/logic_update_client_allg.php", 
      type: "POST", 
      data: allgArray, 
      processData: false, // tell jQuery not to process the data 
      contentType: false, 
      success: function(allgArray){ 
       alert(allgArray); 
       var allgSave = $('#allgSave'); 
       allgSave.text('Aktualisieren erfolgreich!'); 
       allgSave.toggle(); 
      }, 
      error: function(){ 
       var allgSave = $('#allgSave'); 
       allgSave.text('Aktualisieren fehlgeschlagen!'); 
       allgSave.toggle(); 
      } 
     }); 
    }); 

数组的控制台日志正确返回所有值,除了一个“文件” 它说不确定。

我不知道该如何处理它,有没有什么要求,即时通讯失踪?

感谢任何形式的帮助

编辑

var file = fd.append('file', $('#allg_firmen_dok').get(0).files[0]); 

返回undefined

+0

您是否在点击之前将文件发送到您的路径? – hurricane

+0

我不完全知道你的意思吗?操作流程如下:SUBMIT CLICK - >获取所有输入字段的值 - >获取FILE - >放入数组 - >发送到php –

+1

我认为'fd.append()'正确执行,然后返回'undefined'。它只是把东西附加到'fd'。所以你将'undefined'分配给'file'变量。只要放下文件变量并继续使用fd即可。 –

回答

0

我觉得变量FD =新FORMDATA()是一个对象,它具有属性 “文件” 。因此,它无法通过属性“文件”的另一个对象“allgArray” 你需要检查一下你调用函数

$.ajax({ 
     url: "PATHTOFILE/logic/logic_update_client_allg.php", 
     type: "POST", 
     data: allgArray, 

想想你发送数据之前!它可能是另一个从“fd”的“文件”中获取数据的实例。希望它能帮助你! ^^ 顺便说一句,我用AJAX来发送文件的最后一次

$(document).ready(function (e) { 
$("#Form").on('submit',(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     url: "uploader.php", // Url to which the request is send 
     type: "POST",    // Type of request to be send, called as method 
     data: new FormData(this), // Data sent to server, a set of key/value pairs (i.e. form fields and values) 
     contentType: false,  // The content type used when sending data to the server. 
     cache: false,    // To unable request pages to be cached 
     processData:false,  // To send DOMDocument or non processed data file it is set to false 
     success: function(data) // A function to be called if request succeeds 
     { 
      console.log(data); 
     } 
    }); 
})); 

});

+0

感谢您的帮助,显然我无法将FormData的实例称为“this”,因为这会返回我的提交按钮。 因此,“文件”仍然未定义 –

0

add headers: { "Content-Type": "multipart/form-data" } in ajax option

+0

问题发生之前,实际上发送数据与Ajax之前。 当我尝试记录allgArray - >索引“文件”保持未定义 –