$('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导致此错误?

我正在使用window.btoa,因此我可以传递大多数字符。

编辑:我尝试了MDN solution,但它不起作用。我正在使用Google Chrome版本24.0.1312.57 m

最佳答案

错误肯定来自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);

08-28 06:18