2012-07-29 41 views
3

处理错误如果元素#the-json为空,将导致此错误:坏掉的JSON

Uncaught SyntaxError: Unexpected end of input

对于下面的代码:

myJSON = JSON.parse($("#the-json").attr('value')); 

如何把这个错误进行处理,因此不停止整个脚本的工作?

+0

'try'和'catch' – Petah 2012-07-29 10:12:31

回答

7

使用try-catch语句:

try { 
    myJSON = JSON.parse($("#the-json").attr('value')); 
} catch (e) { 
    // handle error 
} 

或检查前做一些事情:

var myJSON = JSON.parse('{}'); // default value 

if ($("#the-json").attr('value')) { 
    myJSON = JSON.parse($("#the-json").attr('value')); 
} 
+0

将try-catch中的所有javascript包装好是不是很好? – 2012-07-29 10:15:34

+0

@ami - 不是所有的代码...只是你可以预测可能出现问题的部分。 – Lix 2012-07-29 10:16:05

+0

而不是'// nothing',你*应该*真的把'//处理错误'... – Lix 2012-07-29 10:27:07

3

而不是在发生的时候捕捉错误 - 防止错误摆在首位发生!只需测试value属性,如果它的值为空 - 明确指定它。然后你的JSON解析器不会抱怨 - 它只会创建一个空对象。

你可以简单地测试空的内容,并提供一个空的对象 -

var data = $("#the-json").attr('value') == ''? '{}': $("#the-json").attr('value'); 
myJSON = JSON.parse(data); 
if ($.isEmptyObject(myJSON)){ 
    // there was no value 
} 

{}语法意味着一个空的JavaScript对象。