В настоящее время я разрабатываю тему tumblr и создал jQuery JSON thingamabob, который использует Tumblr API для следующих действий:
Пользователь нажимал на ссылку "тип сообщения" (например, сообщения с видео ), на этом этапе jQuery будет использовать JSON для захвата всех сообщений, связанных с этим типом, а затем динамически отображать их в обозначенной области.
Теперь все работает отлично, за исключением того, что из-за того, что Tumblr - это Tumblr, а их серверы время от времени постучали, API Tumblr иногда не работает. Теперь я не могу предвидеть, когда эта функция выйдет из строя, поэтому я хочу отобразить какое-то общее сообщение об ошибке, если JSON (по какой-либо причине) не смог загрузить сообщение.
Вы увидите, что я уже написал некоторый код для отображения сообщения об ошибке, когда jQuery не может найти никаких сообщений, связанных с этим типом сообщения, НО он не охватывает никаких ошибок сервера. Примечание. Иногда я получаю такую ошибку:
Не удалось загрузить ресурс: сервер ответил статусом 503 (служба временно недоступна)
Именно для этого сообщения об ошибке 503 мне нужно написать код, но я ' m слегка невежественен :)
Вот код jQuery JSON:
$('ul.right li').find('a').click(function() {
var postType = this.className;
var count = 0;
byCategory(postType);
return false;
function byCategory(postType, callback) {
$.getJSON('{URL}/api/read/json?type=' + postType + '&callback=?', function(data) {
var article = [];
$.each(data.posts, function(i, item) {
// i = index
// item = data for a particular post
switch(item.type) {
case 'photo':
article[i] = '';
count = 1;
break;
case 'video':
article[i] = ''
+ ''
+ ''
+ ''
+ item['video-player']
+ ''
+ '';
count = 1;
break;
case 'audio':
if (use_IE == true) {
article[i] = ''
+ ''
+ ''
+ item['id3-artist']
+' - '
+ item['id3-title']
+ '
'
+ '';
} else {
article[i] = '';
};
count = 1;
break;
case 'regular':
article[i] = '';
count = 1;
break;
case 'quote':
article[i] = ''
+ ''
+ item['quote-text']
+ '
- '
+ item['quote-source']
+ '';
count = 1;
break;
case 'conversation':
article[i] = '';
count = 1;
break;
case 'link':
article[i] = '';
count = 1;
break;
default:
alert('No Entries Found.');
};
}) // end each
if (!(count == 0)) {
$('#content_right')
.hide('fast')
.html('Displaying '
+ postType
+ ' Posts Only
'
+ article.join(''))
.slideDown('fast')
} else {
$('#content_right')
.hide('fast')
.html('Hmmm, currently there are no '
+ postType
+ ' posts to display
')
.slideDown('fast')
}
// end getJSON
}); // end byCategory
}
});
Если вы Я хотел бы увидеть демо в действии, ознакомьтесь с Elegantem , но обратите внимание, что все может работать для вас (или нет) абсолютно нормально, в зависимости от темперамента Tumblr.
Хорошо, так что после следующий ответ jmorts ниже, как можно ближе к букве, насколько позволяет 2 часа ночи, я безуспешно набрал следующий код - предупреждения не появляется. Мябэ, я кукла, может быть, я просто глупый, но если вы, джедаи, можете еще раз взглянуть, я был бы очень признателен :) s никаких предупреждений не появляется. Мябэ, я кукла, может быть, я просто глупый, но если вы, джедаи, можете еще раз взглянуть, я был бы очень признателен :) s никаких предупреждений не появляется. Мябэ, я кукла, может быть, я просто глупый, но если вы, джедаи, можете еще раз взглянуть, я был бы очень признателен :)
$('ul.right li').find('a').click(function() {
var postType = this.className;
var count = 0;
byCategory(postType);
return false;
function byCategory(postType, callback) {
$.getJSON('{URL}/api/read/json?type=' + postType + '&callback=?', function(data, textStatus, xhr) { // main callback function
if(xhr.status == 500 || xhr.status == 404 || xhr.status == 503) {
yourErrorHandler(data, textStatus, xhr); // success
} else {
yourCallbackToRunIfSuccessful(data); // failed
}
}
);
function yourCallbackToRunIfSuccessful(data) {
var article = [];
$.each(data.posts, function(i, item) {
// i = index
// item = data for a particular post
switch(item.type) {
case 'photo':
article[i] = '';
count = 1;
break;
case 'video':
article[i] = ''
+ ''
+ ''
+ ''
+ item['video-player']
+ ''
+ '';
count = 1;
break;
case 'audio':
if (use_IE == true) {
article[i] = ''
+ ''
+ ''
+ item['id3-artist']
+' - '
+ item['id3-title']
+ '
'
+ '';
} else {
article[i] = '';
};
count = 1;
break;
case 'regular':
article[i] = '';
count = 1;
break;
case 'quote':
article[i] = ''
+ ''
+ item['quote-text']
+ '
- '
+ item['quote-source']
+ '';
count = 1;
break;
case 'conversation':
article[i] = '';
count = 1;
break;
case 'link':
article[i] = '';
count = 1;
break;
default:
alert('No Entries Found.');
};
}) // end each
if (!(count == 0)) {
$('#content_right')
.hide('fast')
.html('Displaying '
+ postType
+ ' Posts Only
'
+ article.join(''))
.slideDown('fast')
} else {
$('#content_right')
.hide('fast')
.html('Hmmm, currently there are no '
+ postType
+ ' posts to display
')
.slideDown('fast')
}
// end getJSON
}; // end byCategory
function yourErrorHandler(data,textStatus,xhr) {
alert("Server returned status code " + xhr.status + ". Try again later.");
}
}
});