我正试图在我的IMDb AJAX调用中捕获错误/没有结果。
代码将标题结果与JSONP中的搜索词匹配,以覆盖同源策略。 我正在处理这个教程: Does IMDB provide an API?
当没有结果时,IMDb发送XML错误,我正试图抓住它并发出警报('错误')。
以下是代码:
function searchDatabase() {
var searchTerm = document.getElementById('search').value;
var firstLetter = searchTerm.charAt(0);
var resultDiv = document.getElementById('result');
$('#result').empty();
$.ajax({
url: 'http://sg.media-imdb.com/suggests/' +firstLetter+ '/' +searchTerm+ '.json',
dataType: 'jsonp',
jsonp: false,
jsonpCallback: 'imdb$'+searchTerm,
statusCode: {
403: function() {
alert('HTTP ERROR');
}
}
}).done(function(response) {
if(jQuery.type(response) !== "object") {
alert('ERROR');
} else {
alert(jQuery.type(response));
for(var x in response["d"]) {
resultDiv.insertAdjacentHTML('beforeend', '<br/>' +response["d"][x]["l"]+ '<br/>');
}
}
}).fail(function() {
alert('ERROR');
});
}
首先,什么数据类型是XML?我还是JSON和XML的新手,我想我明白JSON是一个对象?我在其他地方读过JSON不是一个对象(与Javascript对象文字相比)。
jQuery.type返回'string','array'等,它将其他所有内容返回为'object。
当搜索词(例如“some”)成功返回结果时,它处于JSON状态,因此if(jQuery.type(response) === 'object' { alert('OBJECT!'); }
的警报响起,但当搜索词无效时(例如“某事物”),它根本不会返回任何内容并在控制台中显示HTTP代码403。
我也尝试按照“statusCode”的说明从这里捕获AJAX调用中的HTTP代码:https://api.jquery.com/jQuery.ajax/但它没有做任何事情。
我错过了一种非常简单的替代方法来捕获错误吗?我担心我只是一个新手,我刚开始学习JSON和XML 3天前。谢谢!
答案 0 :(得分:0)
我知道没有人回答,但是在我提出这个问题后几天我想出来了,希望其他寻找相同答案的人会觉得这很有用。 我发现这个thread解释了在进行JSONP调用(跨域)时不能使用$ .ajax'error'键来捕获错误。这是我到目前为止找到的唯一方法,用setTimeout记录错误。