2013-02-12 2 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; 
}); 

Это окно.btoa вызывает эту ошибку?Неисправность: INVALID_CHARACTER_ERR: DOM Исключение 5

Я использую window.btoa, чтобы передать большинство персонажей.

EDIT: Я пробовал MDN solution, но он не работает. Я использую Google Chrome версии 24.0.1312.57 m

+0

В какой строке было произойти эта ошибка и на каком браузере? – Uooo

+0

@ w4rumy нет строки журнала указано. Я просто использую консоль GC. –

+0

Способ решить, вызывает ли это 'window.btoa' это создание тестового примера с вызовом' window.btoa' и частью данных, содержащейся в 'a.value'. –

ответ

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

Вы посетили ссылку, которую я разместил? –

+0

@MarCejas я сделал. – Christoph

+0

Хорошо. абсолютно нет этот ответ. –

Смежные вопросы