2015-10-05 161 views
1

我一直試圖從ajax到php文件一段時間沒有成功。所以我正在使用JQuery ValidateJQuery驗證文件上傳

我有一個形式有幾個輸入(姓名,電子郵件等)和一個輸入是文件類型。我執行我所有的驗證,即使在文件上,這一切都運行順利。然後我來到submitHandler函數。從我讀過的文章中可以發現,通過ajax發送文件的問題,現在已經成爲可能。所以我想

submitHandler: function (form) { 
    var $form = form, 
     formData = new FormData(), 
     params = $form.serializeArray(), 
     files = $form.find('[name="fileOne"]')[0].files; 

    $.each(files, function(i, file) { 
     formData.append('uploadedFiles-' + i, file); 
    }); 

    $.each(params, function(i, val) { 
     formData.append(val.name, val.value); 
    }); 

    $.ajax({ 
     type: "POST", 
     url: "php/process.php", 
     dataType: "json", 
     data: formData 
    }).done(function (response) { 
     if (!response.success) { 
      alert("Failed"); 
      console.log(response.errors); 
     } 
     else { 
      alert("Worked"); 
     } 
    }); 
    return false; 
} 

所以我希望能得到我的文件(fileOne)並將其附加到我的表單數據。然而,在PHP中我只是做這行現在

try { 
    if(isset($_FILES['fileOne'])){ 
     var_dump("IN"); 
    } 
    else { 
     var_dump("NO FILE"); 
    } 

} catch (RuntimeException $e) { 
    echo $e->getMessage(); 
} 

的時候,它甚至不打這個PHP,因爲形式與URL獲取的所有數據提交潤通(這通常發生在當jQuery有一個錯誤)。當我得到它的工作,我得到輸出沒有文件。

那麼我怎樣才能發送我的上傳文件與我的表單數據的其餘部分,所以我可以在PHP中處理它?

感謝

+0

你不這樣做你'formData'什麼。在這裏使用try/catch完全沒有意義 - 你沒有任何東西會拋出任何異常。 – CBroe

+0

我的錯誤,顯示了舊版本的數據。已經更新,以表明我通過formData –

+0

如果你想發送你所有的表單域,那麼你所要做的就是將你的表單元素傳遞給FormData。 – CBroe

回答

2

您沒有設置contentType: false, processData: false

$.ajax({ 
    type: "POST", 
    url: "php/process.php", 
    dataType: "json", 
    data: formData, 
    mimeType: "multipart/form-data", 
    contentType: false, 
    processData: false 
}).done(function (response) { 
    if (!response.success) { 
     alert("Failed"); 
     console.log(response.errors); 
    } 
    else { 
     alert("Worked"); 
    } 
});