2013-08-25 9 views
8

के साथ फ़ाइल अपलोड करना मैंने अजाक्स के साथ किसी फ़ॉर्म से फ़ाइलों को अपलोड करने के तरीके पर कई खोज की हैं, और पता चला है कि xhr2 इसे करने में सक्षम होना चाहिए। फिर भी, मैंने फॉर्मडाटा ऑब्जेक्ट्स का उपयोग करने की कोशिश की है और यह काम नहीं करता है।jQuery अजाक्स

यहाँ एक सरल एचटीएमएल प्रपत्र

<!DOCTYPE html> 
<html> 
    <head> 
     <title>File Upload</title> 
    </head> 
    <body> 
     <form id="form" method="post" action="post.php" enctype="multipart/form-data"> 
      <input type="file" name="img"/> 
      <input type="submit" value="Upload" /> 
     </form> 
     <script src="jquery.js"></script> 
     <script src="upload.js"></script> 
    </body> 
</html> 

है और यहाँ 'post.php' फ़ाइल जो ठीक जब 'पुराने जमाने' जिस तरह से कहा जाता है काम करता है: यहाँ

<?php 
if($_FILES['img']['error'] > 0) die('Error ' . $_FILES['file']['error']); 
if(empty($_FILES['img']['name'])) die('No file sent.'); 

$tmp = $_FILES['img']['tmp_name']; 

if(is_uploaded_file($tmp)) 
{ 
    if(!move_uploaded_file($tmp, 'img.png')) echo 'error !'; 
} 
else echo 'Upload failed !'; 
?> 

और है 'अपलोड .js '

$(function() { 
    $('#form').submit(function(e) { 
     e.preventDefault(); 
     data = new FormData($('#form')); 
     console.log('Submitting'); 
     $.ajax({ 
      type: 'POST', 
      url: 'post.php', 
      data: data, 
      cache: false, 
      contentType: false, 
      processData: false 
     }).done(function(data) { 
      console.log(data); 
     }).fail(function(jqXHR,status, errorThrown) { 
      console.log(errorThrown); 
      console.log(jqXHR.responseText); 
      console.log(jqXHR.status); 
     }); 
    }); 
}); 

क्या आपको कोई विचार है कि यह क्यों काम नहीं कर रहा है? कंसोल रिटर्न 'कोई फाइल नहीं भेजी गई'।

बहुत बहुत धन्यवाद!

उत्तर

14

कोड को बदलने का प्रयास करें:

data = new FormData($('#form')); 
इस के साथ

:

data = new FormData($('#form')[0]); 

jQuery सरणी से पहले डोम तत्व प्राप्त करने के लिए।

+0

विश्वास नहीं कर सकता कि यह केवल यही था! आपका बहुत बहुत धन्यवाद ! –

संबंधित मुद्दे