Как отловить ошибку при использовании decodeURI?
Например, если использовать decodeURI('%C4%97%')
это срабатывает и ошибка (да, это ошибка, специально для теста):
URIError: некорректная последовательность URI...('textarea#encode-url-result'). Val(decodeURI(jQuery('input#encode-url-input'). Va...
И даже если я положу это в try-catch
это все еще стреляет смертельно. Есть ли способ поймать его и показать предупреждение?
ОБНОВИТЬ:
Вот мой код, и я все еще получаю ошибку в консоли
try{
jQuery('a#encode-url-encode, a#encode-url-decode').click(function(){
if(jQuery('input#encode-url-input').val().length == 0)
showCustomAlert('<strong>Warning!</strong> Please enter value.');
var result = null;
if(jQuery(this).attr('id') == 'encode-url-encode')
result = encodeURI(jQuery('input#encode-url-input').val());
else if(jQuery(this).attr('id') == 'encode-url-decode')
result = decodeURI(jQuery('input#encode-url-input').val());
jQuery('textarea#encode-url-result').val(result);
});
}
catch(e){
alert(e);
}
4 ответа
Try-catch не работает, если он оборачивает передачу асинхронного обратного вызова.
jQuery('a#encode-url-encode, a#encode-url-decode').click(function() {
if (jQuery('input#encode-url-input').val().length == 0) showCustomAlert('<strong>Warning!</strong> Please enter value.');
var result = null;
try { //It needs to be here.
if (jQuery(this).attr('id') == 'encode-url-encode') result = decodeURI(encodeURI(jQuery('input#encode-url-input').val()));
else if (jQuery(this).attr('id') == 'encode-url-decode') result = decodeURI(decodeURI(jQuery('input#encode-url-input').val()));
} catch (e) {
//handle
}
jQuery('textarea#encode-url-result').val(result);
});
Это отлично работает:
try {
decodeURI('%C4%97%')
} catch (ex) {
alert("ERROR DECODING URI");
}
ДЕМО: http://jsfiddle.net/P6EBN/
РЕДАКТИРОВАТЬ:
Судя по вашему сообщению об ошибке, вы пытаетесь установить значение текстовой области с помощью jQuery.
Попробуйте что-то вроде этого:
var newVal = "";
var toDecode = jQuery('input#encode-url-input').val();
try {
newVal = decodeURI(toDecode);
} catch (ex) {
// alert("ERROR DECODING URI");
}
jQuery('textarea#encode-url-result').val(newVal);
Просто пытаюсь разделить его так, чтобы вы могли ориентироваться конкретно на декодирование.
Кроме того, использование tagName
перед id
селектор не нужен. Просто используйте эти селекторы:
jQuery("#encode-url-input")
// and
jQuery("#encode-url-result")
try {
var x = decodeURIComponent('%C4%97%');
} catch (ex) {
console.log("ERROR DECODING URI: " + ex.message);
}