我有一个HTML来调用REST Web服务并获得JSON答案。 当我输入错误的参数时,我可以毫无问题地捕获错误,但有时JSON上的某些结果为空。我怎么能抓住这种情况呢?
我的HTML:
<div id="divname"></div>
我的javascript:
$.getJSON(URL, function(data) {
$('#divname').html(data.result[0].dest[0].pred[0].time);
})
.done(function() { alert('getJSON request succeeded!'); })
.fail(function(jqXHR, textStatus, errorThrown) { alert('getJSON request failed! ' + textStatus); $('#divname').html('Wrong Parameter.'); })
.always(function() { alert('getJSON request ended!'); });
一个好的JSON结果是这样的:
{
"result": [{
"string01": "104",
"string02": "104 - blablabla",
"string03": "104",
"string04": "blobloblo",
"string05": "blablabla",
"dest": [{
"pred": [{
"time": 1461348846,
"sec": 102,
"min": 1,
"string11": "514-String",
"string12": "Some String",
"string13": "Some other String",
"number": 0
}]
}]
}]
}
但有时,当没有数据显示时,我会得到这样的结果:
{
"result": [{
"string01": "104",
"string02": "104 - blablabla",
"string03": "104",
"string04": "blobloblo",
"string05": "blablabla",
"dest": [{"pred":[]}]
}]
}
我在chrome控制台中获得以下内容:
Uncaught TypeError: Cannot set property 'time' of undefined
我理解为什么会失败,但我不知道如何捕获此错误以显示失败的HTML。
答案 0 :(得分:1)
添加对pred长度的检查:
$.getJSON(URL, function(data) {
if (data.result[0].dest[0].pred.length) {
$('#divname').html(data.result[0].dest[0].pred[0].time);
} else {
// handle the case with empty pred here
}
})
.done(function() { alert('getJSON request succeeded!'); })
.fail(function(jqXHR, textStatus, errorThrown) { alert('getJSON request failed! ' + textStatus); $('#divname').html('Wrong Parameter.'); })
.always(function() { alert('getJSON request ended!'); });
或者,检查pred [0]是否未定义:
$.getJSON(URL, function(data) {
if (typeof data.result[0].dest[0].pred[0] !== 'undefined') {
$('#divname').html(data.result[0].dest[0].pred[0].time);
} else {
// handle the case with empty pred here
}
})
.done(function() { alert('getJSON request succeeded!'); })
.fail(function(jqXHR, textStatus, errorThrown) { alert('getJSON request failed! ' + textStatus); $('#divname').html('Wrong Parameter.'); })
.always(function() { alert('getJSON request ended!'); });