Перебирать URL-адреса в массиве и проверять, существует ли класс

#javascript

#javascript

Вопрос:

Я хотел бы перебирать различные URL-адреса, чтобы проверить, является ли URL-адрес недоступным на основе класса HTML. Таким образом, у меня может быть массив, включающий мои домены, и проверьте, какой из них недоступен, чтобы предупредить меня

 var urls = ['http://www.dummy1.com',  'http://www.dummy2.com' ]
if ($(".underMaintenance")[0]) {  
           alert ("Website Is Down");    
} 
else {  
      //continue looping through the other urls  
}
  

Комментарии:

1. Вы не можете использовать доступ к JavaScript на основе браузера / читать документ внешнего домена, который явно не разрешает это, если это не так, вам нужно будет перейти на серверный прокси или выполнить всю работу на стороне сервера.

2. Как именно это будет работать? Если веб-сайт не работает, как он может вернуть класс? Если сервер не работает, вы не получите никакого ответа. У вас установлен PHP? Я бы предпочел использовать это для проверки статуса

3. Спасибо @AlexK. для вашего мгновенного ответа. В принципе, подходящим для меня был бы скрипт, который выполнялся бы непрерывно с интервалами по URL-адресам, и когда один просматривается и он отключен (на основе getElementByClassName => .underMaintenance), он предупредит меня.

4. Вы могли бы сделать это с помощью javascript в браузере, используя запрос YQL с xpath, чтобы очистить требуемый элемент. Если вы ничего не получаете, сайт открыт; если вы получаете ответ, сайт закрыт. Установите интервальный таймер для запуска запросов и увеличьте счетчик, чтобы изменить целевой URL.

Ответ №1:

Невозможно сделать это через браузер, если у вас нет конечной точки ping API, которая разрешает междоменные запросы. Другим подходом может быть отправка запроса на веб-сайты с использованием внутреннего языка, если вы хотите, чтобы javascript проверялся на сервере node.js с вашего заднего конца. В какой-то момент, какой бы способ вы ни выбрали, вам понадобится серверная часть для этого из-за ограничений, перечисленных здесь

Ответ №2:

Возможно, это не лучший способ, но вот решение javascript на стороне клиента, использующее запрос YQL с XPath для очистки div `inmaintenance’. Каждые 30 секунд (или любой другой интервал, если он больше времени запроса) он снова запускается со следующим URL-адресом в массиве. Как только он доходит до конца массива, он возвращается к началу.

 $(document).ready(function() {
  check();
});

urls = ['google.com', 'yahoo.com'];
i = 0;

function check() {
  checkQuery = 'select * from html WHERE url = "'   urls[i]   '" AND xpath = "//div[@class = 'inmaintenance']"';
  checkUrl = 'http://query.yahooapis.com/v1/public/yql?q='   encodeURIComponent(checkQuery)   'amp;format=xml';
  $.getJSON(checkUrl   'amp;callback=?', function(data) {
    if (data.query.length) {
      alert('Server at '   urls[i]   ' is down');
    }
  }).success(function() {
    i  
    if (i == urls.length) {
      i = 0;
    }
    setTimeout(function() {
      check();
    }, 30000);
  });

}  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>