1. 程式人生 > >導出 excel 400錯誤

導出 excel 400錯誤

過濾 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錯誤