Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   функция. ошибка... в чем проблема? (https://javascript.ru/forum/misc/54347-funkciya-oshibka-v-chem-problema.html)

ufo 14.03.2015 00:41

функция. ошибка... в чем проблема?
 
Добрый день!
Перейдем сразу к делу. идет вызов функции (строка 4)

if (/nebo.mobi/.exec(window.location)) {
    setInterval(function () {
        if (document.getElementById('cbx').checked) {
            var html = get_html('http://nebo.mobi/home', "http://nebo.mobi/home");

             var src = html.getElementsByClassName('tdn')[0].getElementsByTagName('IMG')[0].getAttribute('src');

                console.log(src);

        }
    }, 2000);
}


сама функция:
function get_html(url, ref_url) {
    var html;
    GM_xmlhttpRequest({
        method: "GET",
        url: url,
        headers: {
            Referrer: "http://nebo.mobi/home"
        },
        onload: function (response) {
            var parser = new DOMParser();
            html = parser.parseFromString(response.responseText, "text/html");
/*
var src = html.getElementsByClassName('tdn')[0].getElementsByTagName('IMG')[0].getAttribute('src');
console.log(src);
*/
        },
        onerror: function (response) {
            console.log(response);

        }
    });
    html = 'error';
    return html;
}


выдает ошибку: Uncaught TypeError: Cannot read property 'getElementsByClassName' of undefined script.js:102(anonymous function)

в чем проблема? если получать атрибут
html.getElementsByClassName('tdn')[0].getElementsByTagName('IMG')[0].getAttribute('src')
в самой функции - работает все отлично, вне функции не хочет.

подскажите, в чем загвоздка?

рони 14.03.2015 09:16

ufo,
код первый строка 4 для получения html необходимо время - понятно?

ufo 14.03.2015 16:54

Если честно, то нет :cray:
Объясните пожалуйста :help:

рони 14.03.2015 17:03

ufo,
запрос на сервер -- нужно время чтоб пришёл ответ с сервера -- а ваш код не ждёт исполняется сразу -- а onload ждёт ответ и только тогда исполняется

ufo 14.03.2015 21:37

дык как так то?
я же вызываю функцию. return после onload
по идее функция должна выполнится и возвращать ...

почему это не так происходит? и как можно решить проблему?

рони 14.03.2015 22:16

ufo,
решение использовать функцию в onload -- то есть обрабатывать ответ когда он приходит
Цитата:

Сообщение от bes
каждый в своей жизни должен создать тему с этим вопросом

http://javascript.ru/forum/jquery/52...-funkciyu.html

ufo 15.03.2015 23:02

спасибо за советы)))
впихнул туда synchronous: true, и опять ничего.
но возник вопрос, для чего нужен onerror: и как он работает?

Safort 16.03.2015 00:26

ufo,
Цитата:

но возник вопрос, для чего нужен onerror: и как он работает?
Когда возникает ошибка, то будет вызываться onerror.

Прочти учебник на этом сайте, там всё объясняется.

ufo 16.03.2015 00:42

а ошибка какого рода?


Часовой пояс GMT +3, время: 02:46.