采用Ajax傳遞數據時,通常會將數據整理為data="var1=abc&var2=def"。而當數據中存在加號(+)或是連接符(&)時,服務器端接收數據時會有部分數據丟失現象。
分析一下Ajax傳遞數據的格式與Javascript的語法不難發現:
1. "+"號:JavaScript解析為字符串連接符,所以服務器端接收數據時"+"會丟失。
2. "&":JavaScript解析為變量連接符,所以服務器端接收數據時&符號以后的數據都會丟失。
解決辦法也相當簡單,只需要為+與&符號編碼即可:
//使用post方式發送
function
doRequestUsingPOST()
{
createXMLHttpRequest();
var
retCode = document.getElementById(
"retCode"
).value;
var
data = document.getElementById(
"data"
).value;
data = data.replace(/\+/g,
"%2B"
);
data = data.replace(/\&/g,
"%26"
);
var
queryString =
"retCode="
+ retCode +
"&data="
+ data;
var
url =
"backSealServlet"
;
//使用URL向后台傳值
xmlHttp.open(
"POST"
,url,
false
);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader(
"Content-Type"
,
"application/x-www-form-urlencoded"
);
xmlHttp.send(queryString);
}
【推薦】在 javascript 中加入
對字符串進行處理.如:
或者:
- function URLencode(sStr)
- {
- return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');
- }
對字符串進行處理.如:
- var str=URLencode("abc+");
或者:
- dst_fname=dst_fname.replaceAll("\\+","%20");
|