最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

Ajax提交參數(shù)時(shí)html標(biāo)簽提交失敗如何處理

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 19:56:55
文檔

Ajax提交參數(shù)時(shí)html標(biāo)簽提交失敗如何處理

Ajax提交參數(shù)時(shí)html標(biāo)簽提交失敗如何處理:這次給大家?guī)鞟jax提交參數(shù)時(shí)html標(biāo)簽提交失敗如何處理,處理Ajax提交參數(shù)時(shí)html標(biāo)簽提交失敗的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。最近在公司做資源及文章上傳功能遇到一個(gè)小問題,被坑了好半天。 該功能就類似利用富文本編輯器發(fā)布信息,但
推薦度:
導(dǎo)讀Ajax提交參數(shù)時(shí)html標(biāo)簽提交失敗如何處理:這次給大家?guī)鞟jax提交參數(shù)時(shí)html標(biāo)簽提交失敗如何處理,處理Ajax提交參數(shù)時(shí)html標(biāo)簽提交失敗的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。最近在公司做資源及文章上傳功能遇到一個(gè)小問題,被坑了好半天。 該功能就類似利用富文本編輯器發(fā)布信息,但

這次給大家?guī)鞟jax提交參數(shù)時(shí)html標(biāo)簽提交失敗如何處理,處理Ajax提交參數(shù)時(shí)html標(biāo)簽提交失敗的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。

最近在公司做資源及文章上傳功能遇到一個(gè)小問題,被坑了好半天。

該功能就類似利用富文本編輯器發(fā)布信息,但是用Ajax提交數(shù)據(jù),因此提交參數(shù)值中不可避免的含有html標(biāo)簽。

在本地運(yùn)行代碼一直沒問題,總是可以提交成功,但是代碼部署到線上就不能成功提交數(shù)據(jù)了,被坑了好久,找了好半天才找到問題所在。

提交不成功的原因是因?yàn)槲业奶峤粩?shù)據(jù)中含有html標(biāo)簽,然后直接無法請(qǐng)求到我的目標(biāo)地址。

然后解決辦法如下:

1、在頁面用JS的Base64編碼(類似加密)帶有html標(biāo)簽的參數(shù)值。

2、在目標(biāo)地址獲取到數(shù)據(jù)后,利用后臺(tái)Base64解碼方法對(duì)獲取到的數(shù)據(jù)進(jìn)行解碼即可。

以下是我的JS的Base64編碼和解碼方法代碼:

//下面是64個(gè)基本的編碼
 var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 var base64DecodeChars = new Array(
 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
 //編碼的方法
 function base64encode(str) {
 var out, i, len;
 var c1, c2, c3;
 len = str.length;
 i = 0;
 out = "";
 while(i < len) {
 c1 = str.charCodeAt(i++) & 0xff;
 if(i == len)
 {
 out += base64EncodeChars.charAt(c1 >> 2);
 out += base64EncodeChars.charAt((c1 & 0x3) << 4);
 out += "==";
 break;
 }
 c2 = str.charCodeAt(i++);
 if(i == len)
 {
 out += base64EncodeChars.charAt(c1 >> 2);
 out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
 out += base64EncodeChars.charAt((c2 & 0xF) << 2);
 out += "=";
 break;
 }
 c3 = str.charCodeAt(i++);
 out += base64EncodeChars.charAt(c1 >> 2);
 out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
 out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
 out += base64EncodeChars.charAt(c3 & 0x3F);
 }
 return out;
 }
 //解碼的方法
 function base64decode(str) {
 var c1, c2, c3, c4;
 var i, len, out;
 len = str.length;
 i = 0;
 out = "";
 while(i < len) {
 do {
 c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
 } while(i < len && c1 == -1);
 if(c1 == -1)
 break;
 do {
 c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
 } while(i < len && c2 == -1);
 if(c2 == -1)
 break;
 out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
 do {
 c3 = str.charCodeAt(i++) & 0xff;
 if(c3 == 61)
 return out;
 c3 = base64DecodeChars[c3];
 } while(i < len && c3 == -1);
 if(c3 == -1)
 break;
 out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
 do {
 c4 = str.charCodeAt(i++) & 0xff;
 if(c4 == 61)
 return out;
 c4 = base64DecodeChars[c4];
 } while(i < len && c4 == -1);
 if(c4 == -1)
 break;
 out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
 }
 return out;
 }
 function utf16to8(str) {
 var out, i, len, c;
 out = "";
 len = str.length;
 for(i = 0; i < len; i++) {
 c = str.charCodeAt(i);
 if ((c >= 0x0001) && (c <= 0x007F)) {
 out += str.charAt(i);
 } else if (c > 0x07FF) {
 out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
 out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
 out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
 } else {
 out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
 out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
 }
 }
 return out;
 }
 function utf8to16(str) {
 var out, i, len, c;
 var char2, char3;
 out = "";
 len = str.length;
 i = 0;
 while(i < len) {
 c = str.charCodeAt(i++);
 switch(c >> 4)
 { 
 case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
 // 0xxxxxxx
 out += str.charAt(i-1);
 break;
 case 12: case 13:
 // 110x xxxx 10xx xxxx
 char2 = str.charCodeAt(i++);
 out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
 break;
 case 14:
 // 1110 xxxx 10xx xxxx 10xx xxxx
 char2 = str.charCodeAt(i++);
 char3 = str.charCodeAt(i++);
 out += String.fromCharCode(((c & 0x0F) << 12) |
 ((char2 & 0x3F) << 6) |
 ((char3 & 0x3F) << 0));
 break;
 }
 }
 return out;
 }

頁面調(diào)用JS方法進(jìn)行Base64編碼代碼如下:

 var articleContent = editor.getContent();
 articleContent = base64encode(utf16to8(articleContent));

但是呢,又遇到一個(gè)新的問題,用JS對(duì)數(shù)據(jù)進(jìn)行Base64編碼后,JS居然把加號(hào)(+)替換成了空格,造成我后臺(tái)方法解碼出來的數(shù)據(jù)不正確。

解決辦法如下:

本人首先采用JS方法replace()方法進(jìn)行替換,但是有錯(cuò)誤,JS只是把我的第一個(gè)空格替換成了加號(hào)(+),最后解決辦法如下。

在后臺(tái)(目標(biāo)接受地址下)對(duì)獲取到的數(shù)據(jù),把空格替換成加號(hào)(+)。代碼如下:

string content = Request["content"].ToString();
 if (content.Contains(""))
 {
 content=content.Replace(" ", "+");
 }
 //byte[] sa = Convert.FromBase64String(content);
 //Encoding Ansi = Encoding.GetEncoding("GB2312");
 // content = Ansi.GetString(sa);
 content = Base64Decrypt(content);//Base64解碼

如果后臺(tái)的Base64編碼和解碼方法不會(huì)的請(qǐng)看下面:

/// <summary>
 /// Base64加密
 /// </summary>
 /// <param name="input">需要加密的字符串</param>
 /// <returns></returns>
 public static string Base64Encrypt(string input)
 {
 return Base64Encrypt(input, new UTF8Encoding());
 }
 /// <summary>
 /// Base64加密
 /// </summary>
 /// <param name="input">需要加密的字符串</param>
 /// <param name="encode">字符編碼</param>
 /// <returns></returns>
 public static string Base64Encrypt(string input, Encoding encode)
 {
 return Convert.ToBase64String(encode.GetBytes(input));
 }
 /// <summary>
 /// Base64解密
 /// </summary>
 /// <param name="input">需要解密的字符串</param>
 /// <returns></returns>
 public static string Base64Decrypt(string input)
 {
 return Base64Decrypt(input, new UTF8Encoding());
 }
 /// <summary>
 /// Base64解密
 /// </summary>
 /// <param name="input">需要解密的字符串</param>
 /// <param name="encode">字符的編碼</param>
 /// <returns></returns>
 public static string Base64Decrypt(string input, Encoding encode)
 {
 return encode.GetString(Convert.FromBase64String(input));
 }

相信看了本文案例你已經(jīng)掌握了方法,更多精彩請(qǐng)關(guān)注Gxl網(wǎng)其它相關(guān)文章!

推薦閱讀:

異步的文件或圖片上傳ajax

基于Ajax技術(shù)來實(shí)現(xiàn)無刷新用戶登錄(附代碼)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Ajax提交參數(shù)時(shí)html標(biāo)簽提交失敗如何處理

Ajax提交參數(shù)時(shí)html標(biāo)簽提交失敗如何處理:這次給大家?guī)鞟jax提交參數(shù)時(shí)html標(biāo)簽提交失敗如何處理,處理Ajax提交參數(shù)時(shí)html標(biāo)簽提交失敗的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。最近在公司做資源及文章上傳功能遇到一個(gè)小問題,被坑了好半天。 該功能就類似利用富文本編輯器發(fā)布信息,但
推薦度:
標(biāo)簽: 處理 數(shù)據(jù) 解決
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top