2015-09-28 25 views
4

我尝试通过jQuery发送文件到PHP文件进行处理。如何通过jQuery发送文件到php?

<form action="help-uploader.php" method="POST" class="signup" id="upform" enctype="multipart/form-data"> 

    <input type="text" id="title" name="title" tabindex="1" value=""> 
    <input id="file" type='file'" /> 
    <button class="submitbtn" id="submit">submit</button> 
</form> 

和jQuery:

$(document).ready(function(){ 
     $('#submit').click(function (e) { 
     // custom handling here 
      e.preventDefault(); 
      var ititle = $("#title").val(); 
      var ifile = $("#file").val(); 

      $.post("help-uploader.php", 
       { 
        title: ititle, 
        file: ifile 
       },function(data, status){alert("Data: " + data + "\nStatus: " + status);}); 
     }); 
    }); 

**help-uploader.php**

<?php 
echo $_POST['file']; 
echo basename($_FILES["file"]["name"]); 
?> 

首先ECHO打印在客户端文件的路径。

第二个ECHO不能打印任何东西。

如何通过jQuery正确地向PHP发送文件?

+0

您可以使用FORMDATA –

+4

可能重复(http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronously) –

回答

3

你需要使用formdata。我提供了一个带参数的示例函数,即形式引用和函数回调来完成任务。此函数将绑定表单提交上的事件。尝试如下─

function sendAjaxForm(frm,callbackbefore,callbackdone) 
    { 
     var form = frm; 
     form.submit(function(event){ 
      event.preventDefault(); 
      var formData = new FormData(this); 
      var ajaxReq=$.ajax({ 
       url: $(this).attr('action'), 
       type: $(this).attr('method'), 
       data: formData, 
       async: false, 
       cache: false, 
       contentType: false, 
       processData: false, 
       beforeSend: callbackbefore 
       }); 
      ajaxReq.done(callbackdone); 
     }); // submit done 
    } 

现在调用该函数在你的榜样

sendAjaxForm($('#upform'),function(){alert('sending');},function(data){alert("Data: " + data);}) 
+0

非常感谢,特别为可以与页面中的每种表单配合使用的漂亮功能。 – partiz

1

你需要采取的FormData()优势与使用xmlhttprequest。使用ajax执行文件上传时,不应使用$.post(),因为它不使用xmlhttprequest,而应使用$.ajax()或原生js xmlhttprequest

当你正在使用jQuery,那么你可以用形式代替submit做到这一点:[?我怎么可以异步上传文件]

$(document).ready(function(){ 
    $('#upform').submit(function(e){ 
     e.preventDefault(); 
     var fd = new FormData(document.querySelector(this)); 
     $.ajax({ 
     url: "help-uploader.php", 
     type: "POST", 
     data: fd, 
     cache:false, // do not cache 
     processData: false, // required 
     contentType: false // required 
     success:function(data){ 
      console.log(data); 
     }, 
     error:function(err){ 
      console.log(err); 
     } 
    }); 
    }); 
});