Javascript 使用jquery/ajax方法访问输入类型=文件时显示Php错误

Javascript 使用jquery/ajax方法访问输入类型=文件时显示Php错误,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我需要使用jquery/ajax访问input type=file,以便将值/文件传递到php页面。但它显示了以下错误消息: Notice: Undefined index: file in D:\software installed\xampp\htdocs\contact-management \editContactDetails.php on line 16 我下面的代码中是否有任何问题,或者是否有任何方法可以访问它 我的html代码: <form enctype="multi

我需要使用jquery/ajax访问input type=file,以便将值/文件传递到php页面。但它显示了以下错误消息:

Notice: Undefined index: file in D:\software installed\xampp\htdocs\contact-management
\editContactDetails.php on line 16 
我下面的代码中是否有任何问题,或者是否有任何方法可以访问它

我的html代码:

<form enctype="multipart/form-data">
<input type="file" name="file" id="file" class="file"/>
<input type="button" name="submit" value="Update Details" class="submit" id="UpdateDetails"/>
</form>
$(document).ready(function() {
        $("#UpdateDetails").click(function() {                
         var fn = $('#family_name').val();
         var cdid = $('#cdid').val();
         var family_name = $('#family_name').val();
         var given_name = $('#given_name').val();
         var work_phone = $('#work_phone').val();
         var mobile_phone = $('#mobile_phone').val();
         var email = $('#email').val();
         var email_private = $('#email_private').val();

         var file_des_1 = $('#file_des_1').val();
         var file = $('#file').val(); 

          $.ajax({    //create an ajax request to load_page.php
                type: "POST",
                url: "editContactDetails.php",             
                data : {

                    'cdid' : cdid,                  
                    'family_name' : fn,                 
                    'given_name' : given_name, 
                    'work_phone' : work_phone, 
                    'mobile_phone' : mobile_phone, 
                    'email' : email, 
                    'email_private' : email_private, 

                    'file_des_1' : file_des_1,
                    'file' : file

                    },
                dataType: "html",   //expect html to be returned                
                success: function(response){                    
                    $("#successUpdate").html(response); 
                    //alert(response);
                }

            });
        });
    });
Php文件代码:

//uoload first docuement with description...
$file_des_1 = $_POST['file_des_1']; 
$did = mt_rand(100000, 999999);     
$file =  $_FILES["file"]["name"];
$type =  $_FILES["file"]["type"];
$size =  ($_FILES["file"]["size"] / 1024);
$temp =  $_FILES["file"]["tmp_name"];       
//require file formate 
$allowedExts = array("doc", "docx", "xls", "pdf");  
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);    
//rename uploaded docuement
echo $doc_1 = $did.".".$extension;  
$contacts_doc_directory = "contact_directory";

在开始处理传递给php脚本的数据之前,应该检查这些数据是否确实传递给了脚本。。。您可以使用
isset()
empty()
来检查值是否是作为参数传递的变量集

因此,您的脚本变成:

if (isset($_POST['file_des_1']) && !empty($_POST['file_des_1']) && isset( $_FILES["file"] ) && !empty( $_FILES["file"]["name"] )) {
    //uoload first docuement with description...
    $file_des_1 = $_POST['file_des_1']; 
    $did = mt_rand(100000, 999999);     
    $file =  $_FILES["file"]["name"];
    $type =  $_FILES["file"]["type"];
    $size =  ($_FILES["file"]["size"] / 1024);
    $temp =  $_FILES["file"]["tmp_name"];       
    //require file formate 
    $allowedExts = array("doc", "docx", "xls", "pdf");  
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);    
    //rename uploaded docuement
    echo $doc_1 = $did.".".$extension;  
    $contacts_doc_directory = "contact_directory";
}

尝试此文件上载

<form enctype="multipart/form-data" >
<input type="file" name="file" id="file" class="file"/>
<input type="button" name="submit" value="Update Details" class="submit" id="UpdateDetails"/>
</form>


<script src="http://code.jquery.com/jquery-latest.min.js"

        type="text/javascript"></script>



<script>
$(document).ready(function() {
        $("#UpdateDetails").click(function() {                

 var formData = new FormData($('form')[0]);
 alert(formData);
    $.ajax({
        url: 'editContactDetails.php',  //Server script to process data
        type: 'POST',
        xhr: function() {  // Custom XMLHttpRequest
            var myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload){ // Check if upload property exists
          //      myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // For handling the progress of the upload
            }
            return myXhr;
        },
        //Ajax events
      //  beforeSend: beforeSendHandler,
       // success: completeHandler,
        //error: errorHandler,
        // Form data
        data: formData,
        //Options to tell jQuery not to process data or worry about content-type.
        cache: false,
        contentType: false,
        processData: false
    });//ajax
    });
    });
</script>

$(文档).ready(函数(){
$(“#UpdateDetails”)。单击(函数(){
var formData=新的formData($('form')[0]);
警报(formData);
$.ajax({
url:'editContactDetails.php',//用于处理数据的服务器脚本
键入:“POST”,
xhr:function(){//自定义XMLHttpRequest
var myXhr=$.ajaxSettings.xhr();
if(myXhr.upload){//检查upload属性是否存在
//myXhr.upload.addEventListener('progress',progressHandlingFunction,false);//用于处理上载的进度
}
返回myXhr;
},
//Ajax事件
//beforeSend:beforeSendHandler,
//成功:completeHandler,
//错误:errorHandler,
//表单数据
数据:formData,
//告诉jQuery不要处理数据或担心内容类型的选项。
cache:false,
contentType:false,
processData:false
});//ajax
});
});

我对此进行了检查。现在它没有显示错误消息。但是无法使用Jquery/Ajax获取php文件。我如何才能将输入类型=文件值获取到php页面?您能告诉我为什么它会显示错误消息吗?注意:未定义的索引:D:\software installed\xampp\htdocs\contact management\editContactDetails.php中的文件,第16行,我在问您为什么我的代码会显示错误消息.file无法以使用ajax的方式上载。您需要使用iframe或如上所述使用ajax异步上载文件