jQuery + ajax + ashx實現無重新整理檔案上傳
阿新 • • 發佈:2019-01-25
主要分享的是jQuery + ajax的資料提交技巧,至於是不是.NET框架關係不大,大家可以用自己所用的框架處理上傳操作。
前臺介面程式碼:
<form id="form1" action="#" runat="server" enctype="multipart/form-data"> <asp:FileUpload ID="FileUpload1" runat="server" /> <a href="#" id="btnUpload" class="easyui-linkbutton" data-options="iconCls:'icon-add'">上傳檔案</a> </form>
例子中用的是ASP.NET的 FileUpload 控制元件和easyui的 linkbutton 外掛,不過這些都不是必須的,大家按需使用即可,也可以是html的一般控制元件。反正都是一個檔案瀏覽框和一個上傳按鈕。
需要注意的是:
1、form標籤必不可少,不能只有檔案瀏覽控制元件和上傳按鈕,且標籤中 enctype="multipart/form-data" 必不可少。
2、檔案瀏覽控制元件如果是在客戶端執行,則必須指明name屬性。伺服器端執行可以不指出,如例子。
3、至於指定表單屬性後能不能正常獲取表單中的其他元素資訊,不在本文討論範圍,暫未嘗試。
利用jQuery + ajax提交表單:
<script> $(document).ready(function () { //單擊“上傳資料”按鈕 $("#btnUpload").click(function () { var data = new FormData($("#form1")[0]); $.ajax({ type: "POST", url: "OrderManage.ashx?action=uploadfile", contentType: false, //必須指定 processData: false, //必須指定 data: data, dataType: "text", cache: false, success: function (result) { $.messager.alert("結果", result, "info"); } }); }) }); </script>
需要注意的是:
1、FormData方法有瀏覽器版本限制,具體資訊請自行查閱。不過一般來說主流瀏覽器都支援。
2、FormData方法中,引數[0]表示表單中第一個元素,需要和type="file"控制元件對應。
3、contentType: false, processData: false 這兩句必不可少否則無法實現此功能。
伺服器端一般處理檔案ashx執行上傳:
if (action == "uploadfile")
{
HttpFileCollection files = context.Request.Files;
string filePath = System.Web.HttpContext.Current.Server.MapPath("~/UploadFiles/");
if (files.Count > 0){files[0].SaveAs(filePath + System.IO.Path.GetFileName(files[0].FileName));}
context.Response.Write("上傳成功");
context.Response.End();
}
需要注意的是:
1、filePath的值自行指定即可,但必須是物理路徑,例子中是上傳到網站根目錄下的UploadFiles資料夾內。
2、讀懂程式碼稍作修改即可實現批量上傳。