導出 excel 400錯誤
阿新 • • 發佈:2018-01-12
過濾 header spa javascrip fixed content 數據 reat 用戶輸入
get請求 下載excel 解決錯誤代碼:400
- 錯誤代碼:400原因
編碼問題,url參數出現了特殊字符
<p id="acre-nonCooperativeAcre">導出···</p>
$("#acre-nonCooperativeAcre").click(function () {
nonCooperativeAcre(10, 100, "123", "b1");
});
function nonCooperativeAcre(slope, areal, position, boundary) {
var data = [{
‘slope‘ : slope,
‘area‘: area1,
‘position‘: position,
‘boundary‘: boundary
}];
var a = document.createElement(‘a‘);
// encodeURIComponent()
var url = ‘http://1127.0.0.1:8080/gis/nonCooperativeAcre?jsonParam=‘ + encodeURIComponent(JSON.stringify(data));
a.href = url;
a.click();
}
- encodeURIComponent 簡介
- encodeURIComponent()是對統一資源標識符(URI)的組成部分進行編碼的方法。它使用一到四個轉義序列來表示字符串中的每個字符的UTF-8編碼(只有由兩個Unicode代理區字符組成的字符才用四個轉義字符編碼) 轉義除了字母、數字、(、)、.、!、~、*、‘、-和_之外的所有字符
為了避免服務器收到不可預知的請求,對任何用戶輸入的作為URI部分的內容你都需要用encodeURIComponent進行轉義。比如,一個用戶可能會輸入"Thyme &time=again"作為comment變量的一部分。如果不使用encodeURIComponent對此內容進行轉義,服務器得到的將是comment=Thyme%20&time=again。請註意,"&"符號和"="符號產生了一個新的鍵值對,所以服務器得到兩個鍵值對(一個鍵值對是comment=Thyme,另一個則是time=again),而不是一個鍵值對。
對於 application/x-www-form-urlencoded (POST) 這種數據方式,空格需要被替換成 ‘+‘,所以通常使用 encodeURIComponent 的時候還會把 "%20" 替換為 "+"。
為了更嚴格的遵循 RFC 3986(它保留 !, ‘, (, ), 和 *),即使這些字符並沒有正式劃定 URI 的用途,下面這種方式是比較安全的:
function fixedEncodeURIComponent (str) {
return encodeURIComponent(str).replace(/[!‘()*]/g, function(c) {
return ‘%‘ + c.charCodeAt(0).toString(16);
});
}
- 下面這個例子提供了 UTF-8 下 Content-Disposition 和 Link 的服務器響應頭信息的參數(例如 UTF-8 文件名):
ar fileName = ‘my file(2).txt‘;
var header = "Content-Disposition: attachment; filename*=UTF-8‘‘"
+ encodeRFC5987ValueChars(fileName);
console.log(header);
// 輸出 "Content-Disposition: attachment; filename*=UTF-8‘‘my%20file%282%29.txt"
function encodeRFC5987ValueChars (str) {
return encodeURIComponent(str).
// 註意,僅管 RFC3986 保留 "!",但 RFC5987 並沒有
// 所以我們並不需要過濾它
replace(/[‘()]/g, escape). // i.e., %27 %28 %29
replace(/\*/g, ‘%2A‘).
// 下面的並不是 RFC5987 中 URI 編碼必須的
// 所以對於 |`^ 這3個字符我們可以稍稍提高一點可讀性
replace(/%(?:7C|60|5E)/g, unescape);
}
導出 excel 400錯誤