2013-02-12 143 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