我只想弄清楚deferred
api,并将这个漂亮的示例代码与twitter搜索API一起使用:
var getTweets = function(q) {
return $.ajax({
url: 'http://search.twitter.com/search.json?q=' + encodeURIComponent(q),
dataType: 'jsonp'
})
};
var getTheDay = function(date){
var date = new Date(date);
return date.getDay();
}
var parseTweetData = function(data){
$.each(data.results, function(index, tweet){
console.log(tweet.text
+ ' from ' + tweet.from_user_name
+ ' at ' + getTheDay(Date.parse(tweet.created_at) * 1000));
});
}
var parseError = function(error, xhr) {
alert('failed')
};
$.when(getTweets(' martin')).then(parseTweetData, parseError);
取回结果就好了。问题出在twitter返回403 error的情况。
我想用我的自定义错误处理程序处理该错误,但似乎根本没有触发。我究竟做错了什么?我误解了api吗?如何编写正确的ajax错误处理程序请求?
答案 0 :(得分:3)
根据$ .ajax文档,不会为jsonp请求调用错误处理程序,因此它可能不会在延迟中调用。
错误
键入:Function(jqXHR jqXHR,String textStatus,String errorThrown)
请求失败时要调用的函数。该函数接收三个参数:jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象,描述发生的错误类型的字符串和可选的异常对象(如果发生)。第二个参数的可能值(除了null)是“timeout”,“error”,“abort”和“parsererror”。发生HTTP错误时,errorThrown会收到HTTP状态的文本部分,例如“Not Found”或“Internal Server Error”。从jQuery 1.5开始,错误设置可以接受一系列函数。每个函数将依次调用。 注意:不会为跨域脚本和JSONP请求调用此处理程序。这是一个Ajax事件。
你可以尝试使用超时来触发错误回调,所以基本上我们给了请求一些时间,当时间到期时我们假设请求失败。
$.ajax({
url: 'http://search.twitter.com/search.json?q=' + encodeURIComponent(q),
dataType: 'jsonp',
timeout: 5000 /* 5 seconds timeout, plenty of time for the request to complete */
})