Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在使用decodeURI时捕获错误?_Javascript_Decodeuricomponent - Fatal编程技术网

Javascript 如何在使用decodeURI时捕获错误?

Javascript 如何在使用decodeURI时捕获错误?,javascript,decodeuricomponent,Javascript,Decodeuricomponent,例如,如果使用decodeURI“%C4%97%”将激发并出错为“是”,则这是一个错误,特别是对于测试: URIError:格式错误的URI序列 …'textareaencode-url-result'.valdecodeURIjQuery'inpunecode-url-input'.va 即使我把它放进去试着抓住它,它仍然会致命地开火。有没有办法抓住它并表现出警惕 更新: 这是我的代码,我仍然在控制台中得到错误 try{ jQuery('a#encode-url-encode, a#e

例如,如果使用decodeURI“%C4%97%”将激发并出错为“是”,则这是一个错误,特别是对于测试:

URIError:格式错误的URI序列 …'textareaencode-url-result'.valdecodeURIjQuery'inpunecode-url-input'.va

即使我把它放进去试着抓住它,它仍然会致命地开火。有没有办法抓住它并表现出警惕

更新:

这是我的代码,我仍然在控制台中得到错误

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");
}
演示:

编辑:

从错误消息的外观来看,您正在尝试使用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选择器前面使用标记名。只需使用以下选择器:

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-catch包装异步回调传递,则它不起作用。该catch不会捕获回调函数中的任何内容。您在那里声明函数,而不是调用它。最简单的修复方法是将try/catch移动到回调函数中。@MattGreer当回调被同步调用时,它确实起作用。@Esailija不,它不会起作用,在单击url之前,该函数不会被调用,此时try/catch早就不存在了:@user1692333您不能用try/catch包装整个异步代码块。您需要针对特定的操作…特别是在调用decodeURI的位置。我在回答中已经提到了这一点
try {
    var x = decodeURIComponent('%C4%97%');
} catch (ex) {
    console.log("ERROR DECODING URI: " + ex.message);
}
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);
});