Нужна помощь с видимостью переменной.
Здравствуйте.
Вопрос в следующем. Есть ряд сайтов на которых нужно найти ряд ссылок. Был написан такой скрипт (ниже). Проблема в том, что у меня никак не получается разобраться с видимостью переменной. Внутри $.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,
замените for на gde.forEach |
В итоге решение вышло вот таким, с примером на реальном (первом попавшемся) сайте.
Если у кого то будет более изящное решение, с удовольствием с ним ознакомлюсь :). 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); } }); |
Fortun,
forEach -- сделает тоже самое!!! |
К сожалению, как то так получилось что forEach для меня так и остался с трудом понимаемым и поэтому я всегда предпочитаю простой фор.
|
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>") }) }) }) }); |
Цитата:
можно читать тут Пример ошибочного использования в forEach i уже "замкнуто" |
Спасибо, буду изучать.
|
Часовой пояс GMT +3, время: 11:03. |