Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery.get как передать данные в глобальную переменную? (https://javascript.ru/forum/jquery/12949-jquery-get-kak-peredat-dannye-v-globalnuyu-peremennuyu.html)

abc_ua 12.11.2010 02:13

var list = "";
$.get("ссылка", function (data) { // загружает страницу
	$(".class", data).each(function () { // выбирает адреса ссылок из меню
		$.get("ссылка 2", function (data) { // загружает страницу по адресу из меню
			$(".class2", data).each(function () { //выбирает нужные данные
				...
			});
			$("div.inf").html(list); // вывод данных
		});
	});
});


Хотел запросы сделать последовательно, сформировав в первом массив из адресов и передать во второй запрос, идея глупая, но было поздно и голова не соображала. Сейчас проблема все еще актуальна, только для переменной list, чтобы $("div.inf").html(list); выполнить только 1 раз требуется иметь вне get'a значение list. Ссылок много, поэтому вмешательство в DOM всего 1 раз ощутимо ускорило работу скрипта.

Bercut 12.11.2010 03:08

вы что, гугл парсите ))
у вас $("div.inf").html(list); каждый раз заменяет содержимое "div.inf"

делайте list += yourSuperGreatVar;
а уже в последней итерации $("div.inf").html(list);

abc_ua 12.11.2010 14:51

я так и хочу, но как передать в list значение из get'a? вот тут проблема. Можно ли как-то onload использовать?

P.S.
Цитата:

вы что, гугл парсите
вставляя в get адрес сайта, на котором не находится скрипт, запрос не выполняется.

Bercut 12.11.2010 20:57

ну вы бы сами подумали

// глобальная переменная
var list = "";
// счётчик загрузки всех ваших запросов
var readyCounter = 0;

$.get("ссылка", function(data) {

    var classData = $(".class", data); // так понимаю, что тут у вас набор тегов <a/>
    
    classData.each(function(i) {
    
        $.get($(this).attr('href'), function (data) {
        
            $(".class2", data).each(function () {
                //тут происходит запись в глобальный list
                list += this.innerHTML;
            });
            
            // наращиваем счётчик
            readyCounter++;
            
            onLoadRequest();
            
            // проверяем, что сейчас отрабатывает последний колбэк ваших запросов
            if(readyCounter == classData.length) {
                onLoadOfAllRequests();
            }
        });
    });
});

function onLoadRequest() {
    // здесь также доступен ваш list
}
function onLoadOfAllRequests() {
    $("div.inf").html(list);
    alert('YYEEEAAAAHHHH!!!');
}


и надеюсь вы понимаете, что get запросы отправятся в той последовательности, в которой вы получили ссылки, но их колбеки будут вызываться в совершенно другой.
если ваш list должен сохранить оригинальную последовательность, то он должен быть объектом с таким добавлением записей
list[i] = this.innerHTML;

abc_ua 13.11.2010 22:03

Спасибо!!!!!! Переписал скрипт, на счет вывода в определенном порядке как раз искал решение, тоже подумал создать массив но $("div.inf").html(list); не хочет выводить массив list[i], т.е. придется создавать цикл и пробегать все значения.

P.S. почему innerHTML в этом случае не работает, а только .html?

Bercut 13.11.2010 23:16

идите курить мануалы
за вас и так почти всё сделали

kurtsvl 04.01.2011 14:25

масло масляное ,что за привычка посылать на ... людей которые задают вопрос,зачем форум тогда ??


$.ajax({
      
         url : 'mypage.php',	   
       type : 'post',
      error :  helloError,            //  обработчик в случае неудачи
   success :  helloCallback,       //   обработчик в случае успеха
                                           // первым аргументом в него передаются принятые данные
 dataType : 'text',                   // тип принимаемых данных
        data: { name  : value  }  //  передаваемые на сервер значения  

});
 

});


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