为什么我的错误处理与jquery延迟和jsonp数据不起作用?

时间:2013-02-18 16:38:52

标签: jquery ajax error-handling deferred

我只想弄清楚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错误处理程序请求?

1 个答案:

答案 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 */
})