Я пытаюсь проверить ссылку (которую я знаю, если она неактивна в 50% случаев, но в произвольные моменты времени), чтобы узнать, возвращает ли она 200 HTTP-статус код. Если это так, я хочу изменить класс по ссылке из офлайн в онлайн.
Желаемый процесс: получить все ссылки, указывающие на IP-адреса, дать им класс в автономном режиме, для каждого запроса YQL, если код 200 получен, измените класс на Интернет.
В настоящее время у меня есть это:
var streams = $('article a[href^="http://65"]');
streams.addClass("offline");
streams.each(function(){
destination = $(this).attr("href");
$.getJSON("http://query.yahooapis.com/v1/public/yql?q=use%20%22store%3A%2F%2FtbYorcb2jIkiHPcRbkpSUG%22%20as%20HTTPStatus2%3B%20select%20status%20from%20HTTPStatus2%20where%20url%3D%22"+ encodeURIComponent(destination) +"%22&format=json&callback=",
function(data){
var httpstatus = data.query.results.result.status;
if(httpstatus == 200){
console.log('If = 200');
changeStatus();
}
}
);
function changeStatus(){
console.log('changeStatus called');
$(this).removeClass("offline").addClass("online");
};
//$(this).removeClass("offline").addClass("online");
});
Все это, кажется, работает отдельно от функции changeStatus. Я думал, что, поставив его вне запроса AJAX в отдельной функции, он будет работать, но это не так. Похоже, что проблема связана с неправильной ссылкой $(this)
. Однако, если я помещаю одну и ту же инструкцию вне функции (как указано в коде выше), она работает нормально.
Любые помощь/указатели будут высоко оценены.
«это» не имеет никакого значения внутри функции обратного вызова. Событие обратного вызова происходит за пределами области вашего цикла. –
Спасибо Splash-X - я подумал, что это так, но не знал, как обойти его (и не мог бы выразить это правильно!). – phil