Javascript.RU

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

JQuery .load() в цикле For работает не совсем логично...
Приветствую всех.

Пытаюсь выполнить следующий код, но он работает ни так, как мне нужно:

if(условие){
    $('body').append("<div id='loaddiv'><div>");
    for(var i=1; i<=100; i++){
        var dl = 0;
        $('#loaddiv').load('/script/?p='+i);
        dl = $('#loaddiv .standart-view tr').length;
        alert(dl);
    }
}


Таким образом, я должен получить количество tr-элементов, родителем которого является элемент с классом standart-view, а его родитель - div блок c id = load214235, для каждой страницы, НО постоянно выводятся нули в алерте Я пытался модернизировать код, добавив весь код в callback функцию лоада, чтобы все загрузилось, а потом выполнится остальная часть кода, но все та же не работающая хрень получается (он отказывается видеть dl)...

if(условие){
    $('body').append("<div id='loaddiv'><div>");
    for(var i=1; i<=100; i++){
        var dl = 0;
        $('#loaddiv').load('/folder/?p='+i, function(){
            dl = $('#loaddiv .standart-view tr').length;
            alert(dl);
        });
    }
}


+ у меня после load еще должно идти условие с break; но firebug на него так же ругается, что break не знает, что закрывать... Как мне выйти из ситуации, не подскажете? Чувствую, что что-то намутил с видимостью переменных и данные не успевают подгрузиться с другой страницы, а скрипт летит впереди поровоза. Jquery подключен, весь остальной код рабочий, включая функции из jquery, иерархия элементов на другой странице соблюдена (кол-во tr должно находиться).
Ответить с цитированием
  #2 (permalink)  
Старый 01.08.2014, 22:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

andreloster,
попробуйте неиспользовать for для подобных задач.
поставьте var в 6 строке.
Ответить с цитированием
  #3 (permalink)  
Старый 01.08.2014, 22:44
Новичок на форуме
Отправить личное сообщение для andreloster Посмотреть профиль Найти все сообщения от andreloster
 
Регистрация: 03.09.2013
Сообщений: 5

Сообщение от рони Посмотреть сообщение
andreloster,
попробуйте неиспользовать for для подобных задач.
поставьте var в 6 строке.
Хорошо, а как мне тогда использовать там break?
Ответить с цитированием
  #4 (permalink)  
Старый 01.08.2014, 23:00
Новичок на форуме
Отправить личное сообщение для andreloster Посмотреть профиль Найти все сообщения от andreloster
 
Регистрация: 03.09.2013
Сообщений: 5

Сообщение от рони Посмотреть сообщение
andreloster,
попробуйте неиспользовать for для подобных задач.
поставьте var в 6 строке.
А что тогда можете порекомендовать?
Ответить с цитированием
  #5 (permalink)  
Старый 01.08.2014, 23:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

andreloster,
сделайте функцию -- загрузили i = 0 ;
пришёл ответ -- проверили что хотели -- увеличили i и снова запустили функцию.
или медитируйте в сторону promises и deferred
Load - как дождаться загрузки
- учитесь мыслить в асинхронном стиле
а так у вас пришёл 3 результат стёр пятый ... для примера
Ответить с цитированием
  #6 (permalink)  
Старый 01.08.2014, 23:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

типа так
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>load demo</title>
  <style>
  body {
    font-size: 12px;
    font-family: Arial;
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<b>Projects:</b>
<ol id="new-projects"></ol>
<script>
$('body').append("<ol id='loaddiv'><ol>");
var i = 0;
(function foo()
{
  if(i == 6) {alert($("body").html());return};
  $("#new-projects li").appendTo("#loaddiv");
  $( "#new-projects" ).load( "http://api.jquery.com/resources/load.html #projects li:eq("+i+")",foo);
  i++
})()
</script>
</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как найти в jquery элемент, который создан в цикле php Vagif jQuery 4 08.08.2013 18:17
Вкладки jQuery и подгрузка страницы .load() byFahrenheit jQuery 2 04.03.2013 19:57
JQuery. Функция .load сбиваеся кодировка. HaseProgram jQuery 4 07.03.2012 17:31
jquery не работает в цикле alexus jQuery 3 03.09.2011 14:49
.load() - как в загруженном содержимом использовать jquery? rbooz jQuery 14 25.05.2010 12:03