那些年你踩過的坑之二__傳遞參數轉義還報錯

接着上一個坑後我又遇到另一個坑,那就是還是報錯。
在這裏插入圖片描述
又是某個方法找不到,你說煩不煩,然後各種定位,發現。

誤區一: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","/");

到這裏兩個坑就踩完了,希望今後大家以我爲鑑,別再這種小問題上糾結。
最後祝大家生活愉快,覺得我寫的不錯的可以關注哈喲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章