Нужна помощь с видимостью переменной.
Здравствуйте.
Вопрос в следующем. Есть ряд сайтов на которых нужно найти ряд ссылок. Был написан такой скрипт (ниже). Проблема в том, что у меня никак не получается разобраться с видимостью переменной. Внутри $.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, время: 05:37. |