例如,如果使用decodeURI('%C4%97%')
它会触发和错误(是的,这是一个错误,特别是对于测试):
URIError:格式错误的URI序列 ...( '#textarea的编码的URL-结果')。VAL(decodeURI(jQuery的( '输入#编码的URL输入')。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);
}
答案 0 :(得分:4)
这很好用:
try {
decodeURI('%C4%97%')
} catch (ex) {
alert("ERROR DECODING URI");
}
DEMO: http://jsfiddle.net/P6EBN/
修改强>
从错误消息的外观来看,您正在尝试使用jQuery设置textarea的值。
尝试这样的事情:
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")
答案 1 :(得分:2)
如果包装异步回调传递,则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);
});
答案 2 :(得分:1)
try {
var x = decodeURIComponent('%C4%97%');
} catch (ex) {
console.log("ERROR DECODING URI: " + ex.message);
}
答案 3 :(得分:0)
try
{
var x = decodeURI('%C4%97%');
}
catch(e)
{
alert(e);
}