2013-01-17 165 views
0

我製作了一個動態下拉文件上傳系統,用戶可以選擇工程流,然後選擇學期,然後選擇主題,然後將文件上傳到所需的目錄中。這通常工作正常。我遇到了來自PHPAcademy的Javascript/AJAX文件上傳進度教程,事情工作得很好,直到我陷入困境。動態下拉文件上傳的文件上傳進度

沒有添加JavaScript文件(上傳進度),文件上傳到正確的目錄中,在螢火蟲中沒有顯示錯誤,並且在文件上傳後也提供鏈接。

但是當我添加JS文件後,上傳後沒有鏈接,它始終上傳到根目錄,它顯示了進度,但控制檯顯示兩個錯誤。

這是我的PHP代碼:

<?php 

    if(isset($_POST['upload'])) { 
     $path1=$_POST['one']."/"; 
     $path2=$_POST['two']."/"; 
     $path3=$_POST['three']."/"; 
     $upload_path=$path1.$path2.$path3; 
    } 
    else { 
      echo "Follow the instructions before uploading a file"; 
    }  

    if(!empty($_FILES['file'])) { 
     foreach($_FILES['file']['name'] as $key => $name) { 
      if($_FILES['file']['error'][$key]==0 && move_uploaded_file($_FILES['file']['tmp_name'][$key], $upload_path."$name")) { 
       $uploaded[] = $name; 
      } 
     } 
     if(!empty($_POST['ajax'])) { 
      die(json_decode($uploaded)); 
     } 
    } 
?> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
     <title> SRMUARD - Upload </title> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
     <script type="text/javascript" src="upload.js"></script>   
     <script type="text/javascript"> 
      function val() 
      { 
       if(document.uploads.three.selectedIndex == 0) 
       { 
        alert("Please choose all the appropriate options"); 
       } 
      } 
     </script> 
     <script> 
      $(function() { 
       $("#text-one").change(function() { 
       $("#text-two").load("textdata/" + $(this).val() + ".txt"); 
       }); 
       $("#text-two").change(function() { 
       $("#text-three").load("textdata/" + $(this).val() + ".txt"); 
       }); 
      }); 
     </script> 
    </head> 
    <body> 
     <div value="<?php $upload_path ?>" id="uploadpath"></div> 
     <div id="uploaded"> 
      <?php 
       if(!empty($uploaded)) { 
        foreach($uploaded as $name) { 
         echo 'File Link: '.'<a href="' . $upload_path . $name . '" >', $name, '</a><br/>'; 
        } 
       } 
      ?> 
     </div> 
     <div id="upload_progress" style="display: none"></div> 
     <div> 
      <form action="" method="POST" enctype="multipart/form-data" name="upload" id="upload"> 
       <label for="file">Choose a file: </label><br/> 
        <input type="file" name="file[]" id="file" multiple="multiple"><br/><br/>    
        <select id="text-one" name="one">     
         <option selected value="base">Select Department</option> 
         <option value="CSE" name="cse">Computer Science Engineering</option> 
         <option value="ECE" name="ece">Electronics & Communication Engineering</option> 
         <option value="MECH" name="mech">Mechanical Engineering</option>       
        </select><br/><br/> 
        <select id="text-two" name="two"> //Displays options dynamically using text files 
         <option>Select Semester</option> 
        </select><br/><br/>     
        <select id="text-three" name="three"> //Displays options dynamically using text files 
         <option>Select Subject</option> 
        </select><br/><br> 
        <input type="submit" name="upload" id="submit" value="Upload" onClick="val()" />   
      </form> 
     <div> 
    </body> 
</html> 

這裏是我的javascript代碼:

var handleUpload = function(event) { 

    event.preventDefault(); 
    event.stopPropagation(); 

    var fileInput = document.getElementById('file'); 

    var data = new FormData(); 

    data.append('ajax', true); 

    for(var i = 0; i < fileInput.files.length; ++i) { 
     data.append('file[]', fileInput.files[i]); 
    } 

    var request = new XMLHttpRequest(); 

    request.upload.addEventListener('progress', function(event) { 
     if(event.lengthComputable) { 

      var percent = event.loaded/event.total; 
      var progress = document.getElementById('upload_progress'); 

      while(progress.hasChildNodes()) { 
       progress.removeChild(progress.firstChild); 
      } 

      progress.appendChild(document.createTextNode(Math.round(percent * 100) + '%')); 
     } 
    }); 

    request.upload.addEventListener('load', function(event) { 
     document.getElementById('upload_progress').style.display = 'none'; 
    }); 

    request.upload.addEventListener('error', function(event) { 
     alert('Upload failed due to some reason!'); 
    }); 



    request.addEventListener('readystatechange', function(event) { 
     if(this.readyState == 4) { 
      if(this.status == 200) { 

       var links = document.getElementById('uploaded'); 
       var uploaded = eval(this.response); 
       var div, a; 
       var phpval = document.getElementById('uploadpath').value; 
       for(var i=0; i < uploaded.length; ++i) { 
        div = document.createElement('div'); 
        a = document.createElement('a'); 
        a.setAttribute('href', phpval + uploaded[i]); 
        a.appendChild(document.createTextNode(uploaded[i])); 
        div.appendChild(a); 
        links.appendChild(div); 
       } 

      } else { 
       console.log('Server replied with HTTP status ' + this.status); 
      } 
     } 
    }); 

    request.open('POST','upload.php'); 
    request.setRequestHeader('Cache-Control','no-cache'); 

    document.getElementById('upload_progress').style.display = 'block'; 

    request.send(data); 

} 

window.addEventListener('load',function(event) { 
    var submit = document.getElementById('submit'); 
    submit.addEventListener('click', handleUpload); 
}); 

並在控制檯中顯示的錯誤是:

TypeError: document.uploads is undefined 
[Break On This Error] 

if(document.uploads.three.selectedIndex == 0) 

SyntaxError: missing ; before statement upload.js file line 47 which is var uploaded = eval(this.response); 

而另一個地方,我覺得我犯了一個錯誤是:

a.setAttribute('href', phpval + uploaded[i]); 

的phpval必須對應於動態上傳鏈接。我不能用在JS的$ upload_path,所以做一個div出來,然後用於得到這樣的價值:

var phpval = document.getElementById('uploadpath').value; 

在演示中,你可以參考這個鏈接,事情會更確切地說,請打開你的螢火蟲控制檯,檢查錯誤並幫助我。我無法解決這個問題。

Dynamic Dropdown File Upload with Progress Indication

謝謝

回答

1

另請考慮正確定位腳本。有時會發生的情況是您放置腳本的地方可能會導致衝突。我可以看到你已經有動態下拉功能的腳本。嘗試將它放在表格後面並檢查它是否有效。

希望這會有所幫助。

1

有,你可以嘗試很多JQuery的選項。這裏有一個來自Blueimp。希望這可以幫助。

+0

不完全是我正在尋找,但是,謝謝。我早些時候遇到過這種情況。我可以給這個鏡頭。 – trollster