为什么我对jquery的错误处理被推迟,而jsonp数据不起作用



我只是想弄清楚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错误的情况下。

我想用我的自定义错误处理程序来处理这个错误,但这似乎根本没有被触发。我做错了什么?我是否误解了api?如何编写正确的ajax错误处理程序请求?

根据$.ajax文档,不会为jsonp请求调用错误处理程序,因此它可能也不会调用延迟的。

错误
类型:函数(jqXHRjqXHR,字符串textStatus,字符串errorThrown)
请求失败时要调用的函数。该函数接收三个参数:jqXHR(在jQuery 1.4.x中,XMLHttpRequest)对象,一个描述发生的错误类型的字符串,以及一个可选的异常对象(如果发生)。第二个参数(除了null)的可能值为"timeout"、"error"、"abort"one_answers"parserror"。当发生HTTP错误时,errorThrown会接收HTTP状态的文本部分,如"未找到"或"内部服务器错误"。从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 */
})

最新更新