接着上一個坑後我又遇到另一個坑,那就是還是報錯。
又是某個方法找不到,你說煩不煩,然後各種定位,發現。
誤區一:function內定義的函數和外定義函數作用域不同
第一,方法寫到$(function(){})裏面去了,導致點擊時永遠也加載不了那個方法函數。
這裏說明了一點,對作用域的理解存在問題,那麼裏面的函數和外面的函數有什麼區別呢,首先定義在裏面的函數只能被裏面的方法調用,外面的事件觸發或者方法調用永遠也訪問不到的,相對來說有點私有函數的味道。
但是在外面定義的函數就是不一樣的,他就是公有函數,是人是鬼都可以去用它。
誤區二:針對傳遞的參數存在特殊字符未作處理
那就不得了啦,你傳遞過程肯定還是會報錯,主要特殊字符包括單引號(’),雙引號("),反斜槓號(\);
這樣的話傳遞過程中會帶來很多流程跑不通,但是你確實需要拿到這些數據怎麼辦呢?這個時候冷靜想想,是不是聽說過字符串替換,在這裏我專門爲字符串添加了一個原型方法replaceAll;
如下所示:
// 批量替換
String.prototype.replaceAll = function (s1, s2) {
return this.replace(new RegExp(s1, "gm"), s2);
}
這樣的話還是存在一個問題,反斜槓怎麼整呢?我這個方法暫不支持,所以我就直接百度搜索了一個方法,針對反斜槓用正則表達式去進行替換。如下方法所示,用CC&&CC替換反斜槓。
sqltxt = sqltxt.replace(/\\/g, "CC&&CC");
所有替換了的特殊字符記得回頭接受後反解析
下面就是接收和解析的對應代碼
//替換
sqltxt = sqltxt.replaceAll("'","AA&&AA");
sqltxt = sqltxt.replaceAll('"','BB&&BB');
sqltxt = sqltxt.replace(/\\/g, "CC&&CC");
//解析回來
sqltxt = sqltxt.replaceAll("AA&&AA","'");
sqltxt = sqltxt.replaceAll('BB&&BB','"');
sqltxt = sqltxt.replaceAll("CC&&CC","/");
到這裏兩個坑就踩完了,希望今後大家以我爲鑑,別再這種小問題上糾結。
最後祝大家生活愉快,覺得我寫的不錯的可以關注哈喲。