2013-02-12 141 views
1
$('form#update').submit(function(){ 
    var _data = $(this).serializeArray(); 
    var param = {}; 
    $.map(_data,function(a,b){ 
     if(a.name=='HotelName'){ 
      param[a.name] = window.btoa(a.value); 
     } 
     else{ 
      param[a.name] = a.value; 
     } 
    }); 
    console.log(param); 
    $.post('api.coupon_edit_post.php',param,function(r){ 
     coupons(); 
     reloadMarkers(); 
    }); 
    return false; 
}); 

是window.btoa是否會導致此錯誤?未捕獲錯誤:INVALID_CHARACTER_ERR:DOM異常5

我使用window.btoa,所以我可以傳遞大部分字符。

編輯:我試過MDN solution,但它不工作。我正在使用Google Chrome版本24.0.1312.57 m

+0

在哪條線路會出現這種錯誤發生的和在其瀏覽器? – Uooo 2013-02-12 09:51:28

+0

@ w4rumy表示沒有行日誌。我只是使用GC控制檯。 – 2013-02-12 10:01:45

+0

判斷'window.btoa'是否導致這個問題的方法是創建一個測試用例,只調用'window.btoa'和'a.value'中包含的數據。 – 2013-02-12 10:02:40

回答

6

錯誤來自window.btoa

你應該修改的MDN解決方案,省去轉換前的解碼步驟,比如以下:

function utf8_to_b64(str) { 
    return window.btoa(encodeURIComponent(str)); 
} 

function b64_to_utf8(str) { 
    return decodeURIComponent(window.atob(str)); 
} 

這將創建從編碼字符串,而不是再對其進行解碼的B64字符串(再次將創建符號,btoa無法處理)。現在這個工程:

utf8_to_b64('✓ à la mode'); 
b64_to_utf8("JUUyJTlDJTkzJTIwJUMzJUEwJTIwbGElMjBtb2Rl"); 

當然,由於編碼這顯着延長了b64字符串。

現在,您可以修改您的例子:

param[a.name] = utf8_to_b64(a.value); 
+0

您是否訪問過我發佈的鏈接? – 2013-02-12 10:05:30

+0

@MarCejas我做到了。 – Christoph 2013-02-12 10:07:20

+0

好的。絕對不是這個答案。 – 2013-02-12 10:09:26