<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## **本例以thinkphp5.1為例** 包地址: ~~~ https://packagist.org/packages/phpoffice/phpexcel ~~~ 使用: ~~~ composer require phpoffice/phpexcel ~~~ 控制器引入 ~~~ //引入phpoffice use PHPExcel; use PHPExcel_IOFactory; 導出代碼: ~~~ ~~~ //execl模板下載 public function template_download() { $objExcel = new PHPExcel(); $objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel5'); $objActSheet = $objExcel->getActiveSheet(0); $objActSheet->setTitle('會員批量導入模板'); //設置excel的標題 $objActSheet->setCellValue('A1', '用戶id'); $objActSheet->setCellValue('B1', '昵稱'); $objActSheet->setCellValue('C1', '手機號'); $baseRow = 2; //數據從N-1行開始往下輸出 這里是避免頭信息被覆蓋 //默認數據 $explame_data = array( array( 'user_id' => '1', 'nickname' => '小明', 'phone' => '15012345678', ), ); foreach ($explame_data as $key => $value) { $i = $baseRow + $key; $objExcel->getActiveSheet()->setCellValue('A' . $i, $value['user_id']); $objExcel->getActiveSheet()->setCellValue('B' . $i, $value['nickname']); $objExcel->getActiveSheet()->setCellValue('C' . $i, $value['phone']); } $objExcel->setActiveSheetIndex(0); //4、輸出 $objExcel->setActiveSheetIndex(); header('Content-Type: applicationnd.ms-excel'); $time = date('Y-m-d'); header("Content-Disposition: attachment;filename=會員批量導入模板" . $time . ".xls"); header('Cache-Control: max-age=0'); $objWriter->save('php://output'); } ~~~ 導入代碼: ~~~ public function import_batch_send() { header("content-type:text/html;charset=utf-8"); //上傳excel文件 $file = request()->file('file'); //將文件保存到public/uploads目錄下面 $info = $file->validate(['size' => 1048576, 'ext' => 'xls,xlsx'])->move('./uploads'); if ($info) { //獲取上傳到后臺的文件名 $fileName = $info->getSaveName(); //獲取文件路徑 $filePath = Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $fileName; //獲取文件后綴 $suffix = $info->getExtension(); //判斷哪種類型 if ($suffix == "xlsx") { $reader = \PHPExcel_IOFactory::createReader('Excel2007'); } else { $reader = PHPExcel_IOFactory::createReader('Excel5'); } } else { return json(['status' => '1', 'message' => '文件過大或格式不正確導致上傳失敗-_-!']); } //載入excel文件 $excel = $reader->load($filePath, $encode = 'utf-8'); //讀取第一張表 $sheet = $excel->getSheet(0); //獲取總行數 $row_num = $sheet->getHighestRow(); //獲取總列數 $col_num = $sheet->getHighestColumn(); $import_data = []; //數組形式獲取表格數據 for ($i = 2; $i <= $row_num; $i++) { $import_data[$i]['nickname'] = $sheet->getCell("B" . $i)->getValue(); $import_data[$i]['phone'] = $sheet->getCell("C" . $i)->getValue(); } if (empty($import_data)) { return json(['status' => '1', 'message' => '數據解析失敗']); } //校驗手機號是否重復 $phone_array = array_column($import_data, 'phone'); $phone_ids = implode(',', $phone_array); $result_phone = db('user') ->field('phone') ->where('phone', 'in', $phone_ids) ->select(); if (!empty($result_phone)) { $result_phone_array = array_column($result_phone, 'phone'); $result_phone_ids = implode(',', $result_phone_array); return json(['status' => '3', 'message' => '數據重復', 'result' => $result_phone_ids]); } //將數據保存到數據庫 $res = db('user')->insertAll($import_data); if ($res) { return json(['status' => '2', 'message' => '導入成功']); } else { return json(['status' => '1', 'message' => '提交失敗,請刷新重試']); } } ~~~ \-------------------------------------------- ~~~ public function addPost_import() { header("content-type:text/html;charset=utf-8"); //上傳excel文件 $file = request()->file('file'); $pro_id = input('pro_id'); //將文件保存到public/uploads目錄下面 $info = $file->validate(['size' => 1048576, 'ext' => 'xls,xlsx'])->move('./uploads'); if ($info) { //獲取上傳到后臺的文件名 $fileName = $info->getSaveName(); //獲取文件路徑 //$filePath = Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $fileName; $filePath_ = 'uploads' . DIRECTORY_SEPARATOR . $fileName; //獲取文件后綴 $suffix = $info->getExtension(); //判斷哪種類型 if ($suffix == "xlsx") { $reader = \PHPExcel_IOFactory::createReader('Excel2007'); } else { $reader = PHPExcel_IOFactory::createReader('Excel5'); } } else { //return json(['status' => '1', 'message' => '文件過大或格式不正確導致上傳失敗-_-!']); $this->error(lang("文件過大或格式不正確導致上傳失敗-_-!"), url("coupon/import")); } //載入excel文件 $excel = $reader->load($filePath_, $encode = 'utf-8'); //讀取第一張表 $sheet = $excel->getSheet(0); //獲取總行數 $row_num = $sheet->getHighestRow(); //獲取總列數 $col_num = $sheet->getHighestColumn(); $import_data = []; //數組形式獲取表格數據 for ($i = 1; $i <= $row_num; $i++) { $import_data[$i]['coupon_name'] = $sheet->getCell("A" . $i)->getValue(); $import_data[$i]['create_time'] = date('Y-m-d H:i:s'); $import_data[$i]['pro_id'] = $pro_id; } //dump($import_data);die; if (empty($import_data)) { //return json(['status' => '1', 'message' => '數據解析失敗']); $this->error(lang("數據解析失敗"), url("coupon/import")); } //校驗優惠券是否重復 $coupon_array = array_column($import_data, 'coupon_name'); // dump($coupon_array);die; // $phone_ids = implode(',', $phone_array); $result_phone = db('coupon') ->field('coupon_name') ->whereIn('coupon_name', $coupon_array) ->select() ->toArray(); //$result_phone_array = array_column($result_phone, 'coupon_name'); // dump($result_phone_array);die; if (!empty($result_phone)) { $result_phone_array = array_column($result_phone, 'coupon_name'); //$result_phone_ids = implode(',', $result_phone_array); //return json(['status' => '3', 'message' => '數據重復', 'result' => $result_phone_ids]); $this->error(lang("數據重復"), url("coupon/import")); } $result_phone_array =' error'; //將數據保存到數據庫 $res = db('coupon')->insertAll($import_data); if ($res) { $this->success(lang("導入成功"), url("coupon/index")); // return json(['status' => '2', 'message' => '導入成功']); } else { $this->error(lang("導入失敗,重新導入"), url("coupon/import")); } } ~~~ ![](https://img2020.cnblogs.com/blog/1251386/202006/1251386-20200608215246591-352940496.png) \----------------------------------------------------------------------------------------------------------- # PHP7.2環境中PHPExcel無法導出Excel # 問題 > 這幾天接到一個bug,說的是有某一個后臺的列表頁有一個excel導出功能,最近不能使用了,我立即登陸系統發現確實如此,但是這個上線項目已經運行長達2年,中間并沒有出現問題,于是我拉出源碼進行分析,但是代碼看不出明顯錯誤,于是馬上進行斷點測試。 # 分析 ![](https://img2020.cnblogs.com/blog/1251386/202006/1251386-20200609110741586-710149738.png) 經過測試發現問題出在PHPExcel上面,執行方法save()會報500 Internet sever error。根據經驗這一般是權限問題,我馬上檢查文件夾權限,但是一切正常。這就很奇怪了,于是查閱資料用了網上所有的方法依然沒有恢復,就在我一籌莫展的時候,突然想起前段時間升級了7.2版本PHP,于是我動手查閱資料,果然發現問題! ![](https://img2020.cnblogs.com/blog/1251386/202006/1251386-20200609110808895-358862730.png) ![](https://img2020.cnblogs.com/blog/1251386/202006/1251386-20200609110919664-2092151058.png) PHPExcel官方已不再維護了這個項目了,PHPExcel的版本停止在1.8。那個時候也沒有7.2,所有兼容性當然沒有考慮。由于官方已經停止維護我們也不能獲取補丁,那我們只能考慮換一個插件去處理。 選擇 官方團隊在github上又起了一個新項目,叫PhpSpreadsheet,新項目使用了大量的php新特性,比如命名空間,PSR標準,性能也比PHPExcel高了不少。GItHub點這里 ![](https://img2020.cnblogs.com/blog/1251386/202006/1251386-20200609110948843-1303627453.png) 如果只是單獨的導出excel且數據量巨大的話,我推薦PHP\_XLSXWriter,它并沒有PHPExcel功能豐富,很多高級操作比如凍結表頭,并不具備,但是它導出速度非常快,非常適合于數據量特別大,報表格式不是很復雜的導出需求。GitHub點這里 其大概的用法可以參考大佬寫的博文,[戳這里](https://segmentfault.com/a/1190000010178094?utm_source=coffeephp.com)?https://segmentfault.com/a/1190000010178094?utm\_source=coffeephp.com 思考 最終我選擇PHP\_XLSXWriter完成替換,從而解決BUG,從這次BUG中我意識到一個問題,每當升級PHP版本時,插件相應的升級刻不容緩。就像php7.2剛出來的時候YII2等主流框架會報致命錯誤,其原因就是7.2將Object作為了關鍵字,而框架將其定義為類。所以導致錯誤,一樣是不向下兼容的錯誤。盡量避免錯誤,需要在每次更新版本前多去研究其特性,才可能規避BUG,最后說一句,祝大家永無BUG。 ———————————————— 版權聲明:本文為CSDN博主「RE\_PHPzjw」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/RE\_PHPzjw/article/details/80847299 轉載?[https://blog.csdn.net/RE\_PHPzjw/article/details/80847299](https://blog.csdn.net/RE_PHPzjw/article/details/80847299) # \------[使用PHP\_XLSXWriter代替PHPExcel](https://segmentfault.com/a/1190000010178094)\---------------------------- ## 二者有何區別? `PHPExcel`?是一個處理`Excel`,`CVS`文件的開源框架,它基于微軟的`OpenXML`標準和`PHP`語言。可以使用它來讀取、寫入不同格式的電子表格,這也是`PHP`至今最通用的`Excel`處理工具,但是它有一個非常致命的缺點: 特別占內存,對大批量的表格數據幾乎會讓人累覺不愛,處理速度非常慢,但是它功能非常豐富,`API`非常多,所以在導出復雜格式的`Excel`表格時,你往往不得不使用它,真是讓人又愛又恨。 不幸的是,`PHPExcel`官方已不再維護了這個項目了,官方團隊在`github`上又起了一個新項目,叫`PhpSpreadsheet`,新項目使用了大量的`php`新特性,比如命名空間,`PSR`標準,性能也比`PHPExcel`高了不少,不過該項目至今(2017-07-12)還是開發狀態,最小穩定版還沒出來,估計`bug`會比較多,所以并不建議使用,下圖是項目遷移說明: ![](https://segmentfault.com/img/remote/1460000010161899/view) 相比于`PHPExcel`,`PHP_XLSXWriter`是一個小而強悍的`Excel`讀寫插件,它并沒有`PHPExcel`功能豐富,很多高級操作比如凍結表頭,并不具備,但是它導出速度非常快,非常適合于數據量特別大,報表格式不是很復雜的導出需求,下圖是官方的速度和內存測試: ![](https://segmentfault.com/img/remote/1460000010161900/view) ## `PHP_XLSXWriter`?如何使用? ### 下載 這是?[PHP\_XLSXWriter](https://github.com/mk-j/PHP_XLSXWriter)的`github`地址,你可以點擊下載把它下載下來。解壓之后你可以看到,它的核心文件只有一個:?`xlswriter.class.php`,`examples`目錄為代碼樣例目錄,里面有很多例子你可以參考。 ![](https://segmentfault.com/img/remote/1460000010161901/view) ### 使用 對于日常中絕大部分的報表需求,`PHP_XLSXWriter`?是可以勝任的,下面通過一個例子來熟悉一下`API`的使用。 假設我們要導出下圖中的報表,并通過瀏覽器實現下載: ![](https://segmentfault.com/img/remote/1460000010161902/view) 代碼實現: ~~~ //writer 類 $writer = new XLSXWriter(); //文件名 $filename = "example.xlsx"; //設置 header,用于瀏覽器下載 header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"'); header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate'); header('Pragma: public'); //導出的數據 $string = array ( 0 => array ( 'payc_bill_time' => '2017-07-12 16:40:44', 'payt_received_date' => '2017-07-12', 'ci_name' => '租金', 'payt_num' => 'YRZB(2012)A0047', 'payt_scsr_name' => '李巧紅', 'payt_received' => '300.00', 'paytd_type' => '現金', 'emp_name' => '鄭振標', ), 1 => array ( 'payc_bill_time' => '2017-07-12 16:39:55', 'payt_received_date' => '2017-07-12', 'ci_name' => '租金', 'payt_num' => 'YRZB(2012)A0046', 'payt_scsr_name' => '22222', 'payt_received' => '45.00', 'paytd_type' => '現金', 'emp_name' => '鄭振標', ) ); //每列的標題頭 $title = array ( 0 => '開單時間', 1 => '收款時間', 2 => '開票項目', 3 => '票據編號', 4 => '客戶名稱', 5 => '實收金額', 6 => '收款方式', 7 => '收款人', ); //工作簿名稱 $sheet1 = 'sheet1'; //對每列指定數據類型,對應單元格的數據類型 foreach ($title as $key => $item){ $col_style[] = $key ==5 ? 'price': 'string'; } //設置列格式,suppress_row: 去掉會多出一行數據;widths: 指定每列寬度 $writer->writeSheetHeader($sheet1, $col_style, ['suppress_row'=>true,'widths'=>[20,20,20,20,20,20,20,20]] ); //寫入第二行的數據,順便指定樣式 $writer->writeSheetRow($sheet1, ['xxx財務報表'], ['height'=>32,'font-size'=>20,'font-style'=>'bold','halign'=>'center','valign'=>'center']); /*設置標題頭,指定樣式*/ $styles1 = array( 'font'=>'宋體','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee', 'halign'=>'center', 'border'=>'left,right,top,bottom'); $writer->writeSheetRow($sheet1, $title,$styles1); // 最后是數據,foreach寫入 foreach ($data as $value) { foreach ($value as $item) { $temp[] = $item;} $rows[] = $temp; unset($temp); } $styles2 = ['height'=>16]; foreach($rows as $row){ $writer->writeSheetRow($sheet1, $row,$styles2); } //合并單元格,第一行的大標題需要合并單元格 $writer->markMergedCell($sheet1, $start_row=0, $start_col=0, $end_row=0, $end_col=7); //輸出文檔 $writer->writeToStdOut(); exit(0); ~~~ 上面的每行代碼都做了注釋,如果不懂得話可以去查看一下`example`文件夾中的代碼樣例以及官網主頁的文檔,不過文檔比較簡短; ~~~ //writer 類 $writer = new XLSXWriter(); //文件名 $filename = "example.xlsx"; //設置 header,用于瀏覽器下載 header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"'); header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate'); header('Pragma: public'); //導出的數據 $string = array ( 0 => array ( 'payc_bill_time' => '2017-07-12 16:40:44', 'payt_received_date' => '2017-07-12', 'ci_name' => '租金', 'payt_num' => 'YRZB(2012)A0047', 'payt_scsr_name' => '李巧紅', 'payt_received' => '300.00', 'paytd_type' => '現金', 'emp_name' => '鄭振標', ), 1 => array ( 'payc_bill_time' => '2017-07-12 16:39:55', 'payt_received_date' => '2017-07-12', 'ci_name' => '租金', 'payt_num' => 'YRZB(2012)A0046', 'payt_scsr_name' => '22222', 'payt_received' => '45.00', 'paytd_type' => '現金', 'emp_name' => '鄭振標', ) ); //每列的標題頭 $title = array ( 0 => '開單時間', 1 => '收款時間', 2 => '開票項目', 3 => '票據編號', 4 => '客戶名稱', 5 => '實收金額', 6 => '收款方式', 7 => '收款人', ); //工作簿名稱 $sheet1 = 'sheet1'; //對每列指定數據類型,對應單元格的數據類型 foreach ($title as $key => $item){ $col_style[] = $key ==5 ? 'price': 'string'; } //設置列格式,suppress_row: 去掉會多出一行數據;widths: 指定每列寬度 $writer->writeSheetHeader($sheet1, $col_style, ['suppress_row'=>true,'widths'=>[20,20,20,20,20,20,20,20]] ); //寫入第二行的數據,順便指定樣式 $writer->writeSheetRow($sheet1, ['xxx財務報表'], ['height'=>32,'font-size'=>20,'font-style'=>'bold','halign'=>'center','valign'=>'center']); /*設置標題頭,指定樣式*/ $styles1 = array( 'font'=>'宋體','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee', 'halign'=>'center', 'border'=>'left,right,top,bottom'); $writer->writeSheetRow($sheet1, $title,$styles1); // 最后是數據,foreach寫入 foreach ($data as $value) { foreach ($value as $item) { $temp[] = $item;} $rows[] = $temp; unset($temp); } $styles2 = ['height'=>16]; foreach($rows as $row){ $writer->writeSheetRow($sheet1, $row,$styles2); } //合并單元格,第一行的大標題需要合并單元格 $writer->markMergedCell($sheet1, $start_row=0, $start_col=0, $end_row=0, $end_col=7); //輸出文檔 $writer->writeToStdOut(); exit(0); ~~~ ## 跳坑指南: 自己在使用過程中也踩過一些坑,這里列一下,希望對你有幫助: ### 文件名與類名不對應 在使用`require`或`require_once`時,這其實不是問題,但當使用自動加載時因為二者不對應就無法識別。你或許想把`xlsxwriter.class.php`文件引入到你的項目中,并且加上命名空間,以便于能實現自動加載。此時你需要做的是把文件名更改為類名`XLSXWriter.class.php`(這里引入到TP中),比如我放到`Component`目錄下,那么在該文件中添加命名空間`namespace Component;`,此時該文件中還有個`Zip`類未引入命名空間,需要添加`use ZipArchive;` 這些完成后,就可以在項目中其他地方使用了: ~~~ use Component; $writer = new XLSXWriter(); ~~~ ### 如何設置列格式? 不同的列可能會需要顯示不同的格式,默認的都是文本格式,但有時候需要顯示為數字列,比便于使用excel中的函數,比如上表中的金額列,必須是兩位小數點,千分位,數字格式。 看上面的代碼,數字格式其實是在`writeSheetHeader`方法中設置的,類型為`price`的那一列就是金額列,如果你需要其他格式,官網首頁上列出了常用的格式。 ### 能不能單獨設置某個單元格的值? 這個目前并沒有實現,現在數據的寫入都是`逐行`寫入的,不支持這么細的粒度,不過折中的做法是把不需要填充的單元格寫入`null`即可; 如果有什么使用問題,可以在下面留言,一起探討使用方式:) 轉載 :[https://segmentfault.com/a/1190000010178094?utm\_source=coffeephp.com](https://segmentfault.com/a/1190000010178094?utm_source=coffeephp.com) # **附錄** ## 基于jq的input file文件上傳 input file文件上傳很多人都遇見過,就樣式問題就有一大堆的問題,默認樣式實在是不敢恭維,但在此今天不討論樣式的問題,只給一個大致的思路,一個div包括一個span和一個input,分別設置兩個的定位,然后給input設置opacity為0,設置好寬度充滿div,在設置好span的樣式即可。 眾所周知,ajax不能傳遞文件,但是html的formdata可以。 ### [](https://zhjdeitiny.github.io/2018/08/21/jq%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%B0%8F%E7%BB%93/#html%E4%BB%A3%E7%A0%81 "html代碼")html代碼 ~~~ <p class="selected-box"> <form class="selected-wrap" id="form1" action="Upload" method="post" enctype="multipart/form-data"> <input type="file" class="selected-btn" id ="file" name="file"> </form> <span class="selected-file">選擇本地</span> </p> <div class="leading-in">導入</div> ~~~ 我的代碼是點擊選擇本地出發input file的按鈕選擇文件,然后點擊導入出發ajax,中間還會判斷是否已選擇文件,沒有選擇的話,提示它,選擇文件不對的話,也提示(我這邊判斷的是Execl文件,下方代碼有)。其中需要注意的是必須要用form標簽包裹,注意action、method和enctype屬性,其中特別需要注意的是**enctype**屬性必須為**multipart/form-data**,這樣子才能將文件處理為一個二進制的文件,后臺才能夠進行接收。 ??PS:action這個屬性其實也可以不填,它是放地址的,我們在ajax中會有提交地址的; ????enctype這個屬性其實也可以不在標簽中添加,不過在js中的屬性contentType就必須設置為multipart/form-data, * 簡單來講 > 如果你的input file標簽里面**使用了enctype=”multipart/form-data”**,JQ中這兩個屬性就要這樣寫**processData: false, contentType: false** > 如果如果你的input file標簽里面**沒有使用 enctype=”multipart/form-data”**,JQ就要這樣寫**processData: false,contentType: “multipart/form-data”**。 ### [](https://zhjdeitiny.github.io/2018/08/21/jq%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%B0%8F%E7%BB%93/#js%E4%BB%A3%E7%A0%81 "js代碼")js代碼 ~~~ $(".leading-in").on("click",function(){ var name = $(".selected-txt select option:selected").val(); var flag = $(".selected-btn").val(); var hzm = flag.substr(flag.indexOf(".")+1); if(flag == ""){ alert("請選擇要上傳的文件"); }else if(hzm != "xls" && hzm != "xlsx"){ alert("請選擇Excel格式的文件"); }else{ var forData = new FormData(); forData.set("importfile", $("#file")[0].files[0]); forData.set("systemName", name); // 多個文件上傳的情況,需要啊后臺進行字段匹配如:上方的importfile // var i; // for (i = 0; i < $('.select-file').files.length; i++) { // // forData.append('file[]', this.files[i]); // } $.ajax({ url: baselocation + "/system/file/import", type: 'post', data: forData, cache: false, processData: false, contentType: false, success:function(json){ if(json.success == "success"){ alert("上傳成功"); }else{ alert("上傳失敗"); } },error:function(){ } }); } }) ~~~ js代碼中我先判斷獲取文件的后綴名是不是我自己想要的類型文件,然后進行相應的提示,然后就新建一個FormData對象,然后把文件添加到里面,規則名一個要和后臺確定好,如果還有其他的屬性的,一并放到FormData的對象中就好,畢竟一個單獨的屬性,沒有必要單獨拿出來去提交,直接放到對象里面一起提交就好。 ### [](https://zhjdeitiny.github.io/2018/08/21/jq%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%B0%8F%E7%BB%93/#%E5%B0%8F%E7%BB%93 "小結")小結 * 1、**cache**:cache設為false可以禁止瀏覽器對該URL(以及對應的HTTP方法)的緩存。 jQuery通過為URL添加一個冗余參數來實現。 * 2、**contentType**:jQuery中content-type默認值為application/x-www-form-urlencoded,因此傳給data參數的對象會默認被轉換為query string,我們不需要jQuery做這個轉換,否則會破壞掉multipart/form-data的編碼格式。 因此設置contentType: false來禁止jQuery的轉換操作。 * 3、**processData**:jQuery會將data對象轉換為字符串來發送HTTP請求,默認情況下會用 application/x-www-form-urlencoded編碼來進行轉換。 我們設置contentType: false后該轉換會失敗,因此設置processData: false來禁止該轉換過程。我們給的data就是已經用FormData編碼好的數據,不需要jQuery進行字符串轉換。(它與enctype的關系上方已經闡述) 如果有多文件的情況,代碼中也有注釋,前提是一定要和后臺定好參數規則,建議比如說:file\[文件索引\]這樣的規則,后臺拿到數據之后出掉一些定義好的其他屬性,根據length,一個一個去取好;
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看