Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   JQuery .load() в цикле For работает не совсем логично... (https://javascript.ru/forum/jquery/49190-jquery-load-v-cikle-rabotaet-ne-sovsem-logichno.html)

andreloster 01.08.2014 22:15

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 должно находиться).

рони 01.08.2014 22:41

andreloster,
попробуйте неиспользовать for для подобных задач.
поставьте var в 6 строке.

andreloster 01.08.2014 22:44

Цитата:

Сообщение от рони (Сообщение 323877)
andreloster,
попробуйте неиспользовать for для подобных задач.
поставьте var в 6 строке.

Хорошо, а как мне тогда использовать там break?

andreloster 01.08.2014 23:00

Цитата:

Сообщение от рони (Сообщение 323877)
andreloster,
попробуйте неиспользовать for для подобных задач.
поставьте var в 6 строке.

А что тогда можете порекомендовать?

рони 01.08.2014 23:05

andreloster,
сделайте функцию -- загрузили i = 0 ;
пришёл ответ -- проверили что хотели -- увеличили i и снова запустили функцию.
или медитируйте в сторону promises и deferred
http://javascript.ru/forum/jquery/45...tml#post300426
- учитесь мыслить в асинхронном стиле :)
а так у вас пришёл 3 результат стёр пятый ... для примера

рони 01.08.2014 23:10

:write: типа так
<!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>


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