Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.05.2017, 18:54
Интересующийся
Отправить личное сообщение для Fortun Посмотреть профиль Найти все сообщения от Fortun
 
Регистрация: 13.06.2013
Сообщений: 15

Нужна помощь с видимостью переменной.
Здравствуйте.

Вопрос в следующем. Есть ряд сайтов на которых нужно найти ряд ссылок. Был написан такой скрипт (ниже).
Проблема в том, что у меня никак не получается разобраться с видимостью переменной. Внутри $.get(url, function(data) da и net проставляются корректно, но не видны урлы из массива (стоит undefined), а вне $.get(url, function(data) урлы проставляются корректно, но вместо da и net стоит undefined.
Понять что именно нужно исправить я увы так и не смог, хотя и ясно что дело в видимости "chevo". Или в неправильно поставленном for.


<!DOCTYPE html>
<html>
<head>
	<title>Title</title>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<button>Get Meta Data</button>
<table>
</table>
<script type="text/javascript" src = "script.js"></script>
</body>
</html>


Код:
$('button').click(function(){

var gde = ['http://site1.ru',
'http://site2.ru',
'http://site3.ru'];
var chto = ['http://url1.ru',
'http://url1.ru',
'http://url1.ru'];	
	for (i=0; i<gde.length; i++){		
  var query = 'select * from html where url="' + gde[i] + '" and xpath="*"';
  var url = 'https://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent(query);
  var what = chto[i];
  var chevo;

  $.get(url, function(data) {
    var html = $(data).find('html');    
    var finding = 'a[href*="'+ what + '"]';
    if(html.find(finding).attr('href')){    	
    	var chevo = "da"
    } else {    	
	var chevo = "net"
    }

// $("table").append("<tr><td class='where'>" + gde[i] + "</td><td class='what'>" + chto[i] + "</td><td class='result'>" + chevo + "</td></tr>")
	  });

$("table").append("<tr><td class='where'>" + gde[i] + "</td><td class='what'>" + chto[i] + "</td><td class='result'>" + chevo + "</td></tr>")
}
});

Последний раз редактировалось Fortun, 16.05.2017 в 19:02.
Ответить с цитированием
  #2 (permalink)  
Старый 16.05.2017, 19:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Fortun,
замените for на gde.forEach
Ответить с цитированием
  #3 (permalink)  
Старый 16.05.2017, 22:11
Интересующийся
Отправить личное сообщение для Fortun Посмотреть профиль Найти все сообщения от Fortun
 
Регистрация: 13.06.2013
Сообщений: 15

В итоге решение вышло вот таким, с примером на реальном (первом попавшемся) сайте.
Если у кого то будет более изящное решение, с удовольствием с ним ознакомлюсь .

var gde = ['https://danieldefo.ru/', 'https://danieldefo.ru/', 'https://danieldefo.ru/', 'https://danieldefo.ru/'];
var chto = ['https://danieldefo.ru/articles/', 'https://danieldefo.ru/reklama/', 'https://dawieldefo.ru/reklama/', 'https://danieldefo.ru/forums/'];

function isFind(where, what, result) { 
	var query = 'select * from html where url="' + where + '" and xpath="*"';
	var url = 'https://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent(query);
	$.get(url, function(data) {
    var html = $(data).find('html');    
    var finding = 'a[href*="'+ what + '"]';
    if(html.find(finding).attr('href')){    	
    	result = "da"
    } else {    	
	result = "net"
    }
     $("table").append("<tr><td class='where'>" + where + "</td><td class='what'>" + what + "</td><td class='result'>" + result + "</td></tr>");
});

}
$('button').click(function(){ 
	for (var i=0; i<gde.length; i++) {
		var wheree = gde[i];
		var whaat = chto[i];
		var resuult;
		isFind (wheree, whaat, resuult);
	}
});
Ответить с цитированием
  #4 (permalink)  
Старый 16.05.2017, 22:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Fortun,
forEach -- сделает тоже самое!!!
Ответить с цитированием
  #5 (permalink)  
Старый 16.05.2017, 22:18
Интересующийся
Отправить личное сообщение для Fortun Посмотреть профиль Найти все сообщения от Fortun
 
Регистрация: 13.06.2013
Сообщений: 15

К сожалению, как то так получилось что forEach для меня так и остался с трудом понимаемым и поэтому я всегда предпочитаю простой фор.
Ответить с цитированием
  #6 (permalink)  
Старый 16.05.2017, 22:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Fortun,
$(function() {
    var gde = ["https://danieldefo.ru/", "https://danieldefo.ru/", "https://danieldefo.ru/", "https://danieldefo.ru/"];
    var chto = ["https://danieldefo.ru/articles/", "https://danieldefo.ru/reklama/", "https://dawieldefo.ru/reklama/", "https://danieldefo.ru/forums/"];
    $("button").click(function() {
        gde.forEach(function(where, i) {
            var query = 'select * from html where url="' + where + '" and xpath="*"';
            var url = "https://query.yahooapis.com/v1/public/yql?q=" + encodeURIComponent(query);
            var what = chto[i];
            $.get(url, function(data) {
                var html =  $(data).find("html");
                var finding = 'a[href*="' + what + '"]';
                var result = html.find(finding).length ? "da" : "net";
                $("table").append("<tr><td class='where'>" + where + "</td><td class='what'>" + what + "</td><td class='result'>" + result + "</td></tr>")
            })
        })
    })
});
Ответить с цитированием
  #7 (permalink)  
Старый 16.05.2017, 22:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от Fortun
Понять что именно нужно исправить я увы так и не смог
хотя вы уже поняли, что нужно сохранить значение i,
можно читать тут Пример ошибочного использования

в forEach i уже "замкнуто"
Ответить с цитированием
  #8 (permalink)  
Старый 17.05.2017, 00:17
Интересующийся
Отправить личное сообщение для Fortun Посмотреть профиль Найти все сообщения от Fortun
 
Регистрация: 13.06.2013
Сообщений: 15

Спасибо, буду изучать.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простейший калькулятор на JS. Нужна помощь. Siverena Общие вопросы Javascript 2 06.04.2017 13:42
Нужна помощь по javascript darklend Общие вопросы Javascript 0 12.01.2014 23:33
Нужна помощь: Slider wheel Alex555 Мобильный JavaScript 0 15.05.2013 18:06
Нужна помощь по слайдеру seoguru Работа 3 28.01.2013 22:02
нужна помощь dominosoko Серверные языки и технологии 4 14.03.2010 02:17