2015-02-25 7 views
0

Привет так я работаю над формой загрузки файлов и все работает, но файл PHPUndefined индекс при отправке файла в PHP с помощью AJAX

HTML-:

<h2>Upload a new video</h2> 
<p>THEN SET UP THE BASIC INFORMATION</p> 

<form class="upf" method="post" enctype="multipart/form-data"> 
    <h1><i class="icono-upArrow"></i></h1> 
    <input type="file" name="vid" id="video" /> 
</form> 

JQuery:

$.fn.upload = function(remote,data,successFn,progressFn) { 
    // if we dont have post data, move it along 
    if(typeof data != "object") { 
     progressFn = successFn; 
     successFn = data; 
    } 
    return this.each(function() { 
     if($(this)[0].files[0]) { 
      var formData = new FormData(); 
      formData.append($(this).attr("name"), $(this)[0].files[0]); 

      // if we have post data too 
      if(typeof data == "object") { 
       for(var i in data) { 
        formData.append(i,data[i]); 
       } 
      } 

      // do the ajax request 
      $.ajax({ 
       url: remote, 
       type: 'POST', 
       xhr: function() { 
        myXhr = $.ajaxSettings.xhr(); 
        if(myXhr.upload && progressFn){ 
         myXhr.upload.addEventListener('progress',function(prog) { 
          var value = ~~((prog.loaded/prog.total) * 100); 

          // if we passed a progress function 
          if(progressFn && typeof progressFn == "function") { 
           progressFn(prog,value); 

          // if we passed a progress element 
          } else if (progressFn) { 
           $(progressFn).val(value); 
          } 
         }, false); 
        } 
        return myXhr; 
       }, 
       data: formData, 
       dataType: "json", 
       cache: false, 
       contentType: false, 
       processData: false, 
       complete : function(res) { 
        var json; 
        try { 
         json = JSON.parse(res.responseText); 
        } catch(e) { 
         json = res.responseText; 
        } 
        if(successFn) successFn(json); 
       } 
      }); 
     } 
    }); 
}; 


$("#video").change(function(){ 
    $("#video").upload("includes/upload_vid.php", function(suess){ 
     $.ajax({ 
      url: 'includes/upload_vid.php', 
      success:function(data){ 
       $(".tesst").html(data); 
      } 
     }); 
    },$("#prog")); 
}); 

теперь JQuery работает, и я получаю прогресс в своем баре прогресса , но PHP не делает этого, я думаю, потому что я AJAXing файл, как я проверяю информацию о файле в PHP, неправильно пу путь здесь является PHP код:

<?php 
    $video_err =""; 

    if($_FILES['vid']['type']=='video/mp4'){ 
     $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1023456789"; 

     $randName = substr(str_shuffle($chars), 0 , 15); 

     if(file_exists('data/users/videos/'.$randName.''.$_FILES['vid']['name'])){ 

     }// end of file exits 
     else { 
      $des = 'data/users/videos/'.$randName.''.$_FILES['vid']['name']; 
      if(move_uploaded_file($_FILES['vid']['tmp_name'], $des)){ 
       $video_err.= "Done"; 
      } else{ 
       $video_err .= "Sorry something went wrong, please try later"; 
      } 
     } 
    }// end of checking the file type[video] 
    else{ 
     $video_err.= "Invaild File, sorry we now only accept .mp4 format"; 
    } 
    echo $video_err;  

Вся проблема в том, что $_FILES['vid'] не определен в то время как я сделал АЯКС файл так, что делать?

+0

Попробуйте 'var_dump ($ _ FILES)' в начале –

+0

он возвращает пустой массив! Я думаю, это должно было вернуть информацию о файле в массив! но все это возвращается array (0) { – SR11

+0

Я пробовал свой код, и он работает на меня. откройте файл 'php.ini' и проверьте, установлено ли' file_uploads' 'ON' –

ответ

0

Вы могли бы просто использовать:

$("#video").change(function(){ 
    $("#video").upload(
     "includes/upload_vid.php", 
     function(success){ 
      $(".tesst").html(success); 
     }, 
     $("#prog") 
    ); 
}); 
Смежные вопросы