Ajax вызов в твиттер и настройка функции ошибки или сбоя - PullRequest
1 голос
/ 17 февраля 2011

На моем сайте есть код, который использует ajax для добавления в мой канал Twitter. В настоящий момент он работает отлично, но моя проблема в том, что когда не происходит твиттер-вызов или если я нахожусь в месте, где твиттер заблокирован через брандмауэр, я вижу только пустую область. Я хотел бы иметь функцию ошибки, которая позволит пользователям знать. «Произошла ошибка при загрузке канала Twitter. Повторите попытку позже.»

Вот код на данный момент;

(function($) {
$.fn.twitscroller = function(options) {
    var
    defaults = {
        user: null,
        visible: 1,
        speed: 8000,
        vertical: true,
        count: 10
    },
    settings = $.extend({},
    defaults, options);

    this.each(function() {

        var $this = $(this);
        $this.html('');
        $this.addClass('twitscroller-replace');

        $.ajax({
            type: "GET",
            url: "http://twitter.com/status/user_timeline/" + settings.user + ".json?callback=?",
            data: {
                count: settings.count
            },
            dataType: "jsonp",

            success: function(res) {
                $('<ul>').appendTo('.twitscroller-replace')
                $(res).each(function(i, val) {
                    var title = val.text
                    .replace(/\b(https?|ftp|file):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/ig, '<a href="$&">$&</a>')
                    .replace(/@(\w*)\b/ig, '@<a href="http://twitter.com/$1">$1</a>')
                    .replace(/#(\w*)\b/ig, '<a href="http://twitter.com/search?q=%23$1">#$1</a>');
                    time = TwitterDateConverter(val.created_at);
                    var link = "http://twitter.com/daspixl/statuses/" + val.id;
                    if (val.source == '<a href="http://bit.ly" rel="nofollow">bitly</a>') {
                        val.source = val.source.replace(val.source, '<a href="http://s.daspixl.com" rel="nofollow">http://s.daspixl.com</a>');
                    }
                    var source = val.source
                    $('<li></li>')
                    .html('<span class=\"title\">' + title + '</span>')
                    .append('<br /><span class=\"date\">' + time + '&nbsp; via &nbsp;' + source + '</span>')
                    .appendTo('.twitscroller-replace ul');
                });
                $('.twitscroller-replace').jCarouselLite({
                    vertical: settings.vertical,
                    visible: settings.visible,
                    auto: settings.speed
                });
                $('.twitscroller-replace').removeClass('twitscroller-replace');
            }
        });
    });
    return this;
}   
})(jQuery);

function TwitterDateConverter(time){
var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")),
    diff = (((new Date()).getTime() - date.getTime()) / 1000),
    day_diff = Math.floor(diff / 86400);

if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
    return;

return day_diff == 0 && (
        diff < 60 && "just now" ||
        diff < 120 && "1 minute ago" ||
        diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
        diff < 7200 && "1 hour ago" ||
        diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
    day_diff == 1 && "Yesterday" ||
    day_diff < 7 && day_diff + " days ago" ||
    day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";
};

Любая помощь будет отличной.

Спасибо, Джеймс

1 Ответ

0 голосов
/ 13 мая 2011

Просто установите атрибуты $ .ajax () следующим образом:

$.ajax({
    url:'',
    type:'GET',
    data: { key : value },
    dataType:'JSONP',
    success: function(){ /* The code you want to execute on a success call */},
    error: function(){ /* The code you want to execute on a fail call */ }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...