如何在使用decodeURI时捕获错误

How to catch error when using decodeURI?

本文关键字:错误 decodeURI      更新时间:2023-09-26

例如,如果使用decodeURI('%C4%97%'),它会触发并出错(是的,这是一个错误,特别是对于测试):

URIError:错误的URI序列…(textarea # encode-url-result) .val (decodeURI (jQuery(输入# 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);
}

运行正常:

try {
    decodeURI('%C4%97%')
} catch (ex) {
    alert("ERROR DECODING URI");
}
演示:

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);

只是想把它分开,这样你就可以专门针对解码。

另外,在id选择器前面使用tagName是不必要的。只需使用这些选择器:

jQuery("#encode-url-input")
// and
jQuery("#encode-url-result")

如果包含异步回调传递,则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 {
    var x = decodeURIComponent('%C4%97%');
} catch (ex) {
    console.log("ERROR DECODING URI: " + ex.message);
}
try
{
    var x = decodeURI('%C4%97%');
}
catch(e)
{
    alert(e);
}