跳到主要內容

精選文章

【公開聲明】關於近期網路特定言論與個資洩漏事件的說明

大家好,我是江舜智(紅色死神)。 近期有許多長期關注我的朋友、學生以及合作夥伴向我反映,網路上有特定人士(Threads 帳號 @drama.note)持續在各類與事件無直接關聯的討論串、課程資訊以及公開貼文下方留言,並引導他人前往我的個人網站與公開平台,同時以負面標籤及特定敘事方式討論我個人。 由於相關行為已持續相當長一段時間,甚至延伸至現實生活層面,對我的合作單位、教學夥伴以及部分學生造成困擾與壓力,我對此感到遺憾,也對受到影響的朋友們表達歉意。 因此,我希望藉此機會向所有關心此事的朋友,說明我的立場與態度。 一、關於事件本身:理性討論永遠受到歡迎 多年來,不論是在軟體開發、網頁前端教學領域,或是經營「Uniform Map 制服地圖」、進行攝影創作與分享個人觀點時,我始終相信公開透明與理性交流的重要性。 我並非完美的人,任何人都可能有思慮不周或與他人意見不同的時候。過去關於網站經營模式與相關議題,網路上確實出現過不少討論與質疑,而相關事項也曾進入司法程序接受調查。 經檢察機關完整調查後,最終依法作出不起訴處分,案件已告確定。 這代表相關指控經過司法審查後,並未認定存在違法情事。即使如此,我仍然願意以開放的態度面對外界意見。 如果有人對於我的教學內容、網站運作方式,或任何公開言論抱持不同看法,我始終歡迎在尊重彼此的前提下進行公開且理性的討論。 若有任何值得檢討與改進之處,我也願意虛心接受建設性的批評與建議。 二、關於持續性的騷擾行為:應以事實與法律為依據 我認為理性討論與持續性騷擾之間,存在明確界線。 近一年來,特定人士的部分行為已不再只是針對議題提出意見,而是逐漸演變成持續性的人身攻擊與現實層面的干擾,包括: • 在與事件無直接關聯的課程公告、教學資訊及各類公開討論串中,反覆張貼我的個人資訊與相關內容。 • 主動聯繫我的合作單位與工作相關機構,對其施加壓力或進行干擾。 • 在司法程序進行期間及收到相關通知後,仍持續以指名道姓方式發布涉及人格評價與攻擊性的言論。 我尊重每個人表達意見與監督公共議題的權利,但我同樣認為,任何討論都應建立在事實基礎上,並尊重法律程序與他人的基本權益。 無論支持或反對我的人,都有權自行查閱公開資訊、了解案件經過並形成自己的判斷,而不是透過片面標籤或情緒性指控來取代事實。 三、我的處理方式 對於相關爭議,我始終選擇透過法律與制度來處理,...

[Vue.js] 在 ajax 上傳後取得 data 的 Object

最近在學 Vue.js,遇到一些問題解決了做點小筆記。



寫了一個 ajax 上傳的功能,上傳 csv 後會自動產生圖表,並可以藉由左邊的列表增加刪減項目,上傳 csv 的程式碼如下。

  1. new Vue({   
  2.   el: '#app',   
  3.   data: {   
  4.     list: [   
  5.     ]   
  6.   },   
  7.     methods: {   
  8.         uploadCsv: function(){   
  9.         csv =  $("#csv_file")[0].files;   
  10.         var data = new FormData();      
  11.         data.append("csv_file", csv[0]);      
  12.         var self = this;   
  13.         $.ajax({      
  14.                 url: 'upload-csv.php',      
  15.                 type: 'POST',      
  16.                 data: data,      
  17.                 cache: false,        
  18.                 processData: false// Don't process the files      
  19.                 contentType: false// Set content type to false as jQuery will tell the server its a query string request      
  20.             success: function(data, textStatus, jqXHR)      
  21.             {      
  22.                 $csvData=data; //return string   
  23.   
  24.                 d3.csv($csvData, function(data) {   
  25.                     self.list=data;   
  26.                     arrayLength=self.list.length;   
  27.                         for($i=0;$i<arrayLength;$i++){   
  28.                             self.list[$i]["color"]=color($i);   
  29.                         }   
  30.                     svg.remove();   
  31.                     svg = d3.select("#chart").append("svg").attr("width",400).attr("height",300);   
  32.   
  33.                     svg.append("g").attr("id""salesDonut");   
  34.   
  35.                     Donut3D.draw("salesDonut", self.list, 150, 150, 130, 100, 30, 0.4);   
  36.   
  37.                     var info = svg.selectAll("g.info")   
  38.                               .data(self.list)   
  39.                               .enter()   
  40.                               .append("g")   
  41.                               .attr("class""info")   
  42.                               .attr("transform""translate(" + 300 + "," + 50 + ")");   
  43.   
  44.                           info.append("text")   
  45.                           .attr("x", 10)   
  46.                           .attr("y"function(d, i){   
  47.                             return i*24;   
  48.                           })   
  49.                           .attr("fill"function(d, i) {   
  50.                             return color(i);   
  51.                           })   
  52.                           .text(function(d, i) {   
  53.                             return d.label+": "+d.value;   
  54.                           });   
  55.   
  56.                 });   
  57.                    
  58.                 if(typeof data.error === 'undefined')      
  59.                 {      
  60.                     // Success so call function to process the form      
  61.                 }      
  62.                 else     
  63.                 {      
  64.                     // Handle errors here      
  65.                     console.log('ERRORS: ' + data.error);      
  66.                 }      
  67.             },      
  68.             error: function(jqXHR, textStatus, errorThrown)      
  69.             {      
  70.                 // Handle errors here      
  71.                 console.log('ERRORS: ' + textStatus);      
  72.                 // STOP LOADING SPINNER      
  73.             }      
  74.         });     
  75.         }   
  76.   }  

html 則為這樣

  1. <div class="row" id="app">  
  2.             <div class="col-md-6">  
  3.                 <form class="form-inline">  
  4.                     <div class="form-group">  
  5.                         <label for="">上傳 csv: </label><input name="csv_file" type="file" id="csv_file">    
  6.                     </div>  
  7.                     <a role="button" class="btn btn-primary" id="upload_csv" v-on:click="uploadCsv">確認上傳</a>  
  8.                 </form>  
  9.                 <form class="form-inline">  
  10.                 <div class="form-group">  
  11.                          <input type="text" class="form-control" id="d_item" placeholder="項目" v-model="label">  
  12.                         <div class="input-group">  
  13.                              
  14.                           <input type="text" class="form-control" id="d_val" placeholder="值" v-model="value" number>  
  15.                           <span class="input-group-btn">  
  16.                             <button class="btn btn-primary" id="add_data" type="button" v-on:click="addItem">新增</button>  
  17.                           </span>  
  18.                         </div><!-- /input-group -->  
  19.                     </div>  
  20.                 </form>  
  21.                 <ul class="list-group" id="item_list" >  
  22.                     <li v-for="item in list" data-item='{{ item.label }}' data-val='{{ item.value }}' class='list-group-item'>{{ item.label }}: {{ item.value }}<span v-on:click="removeItem($index)" class='badge'>x</span></li>  
  23.                 </ul>  
  24.                 <a role="button" class="btn btn-primary" id="btn_generate" v-on:click="generateChart()">Generate</a> <a role="button" class="btn btn-primary">Save</a>  
  25.             </div><!-- col-md-6 -->  
  26.             <div class="col-md-6">  
  27.                 <div id="chart"></div>  
  28.             </div>  
  29. </div><!-- row -->  

留言

熱門文章