popov654, тут очень много текста. не могли бы вы описать проблему в двух предложениях, с кодом ?) 
	 | 
	
		
 Цитата: 
	
 Цитата: 
	
 Я убрал лишний текст (сорри за повтор). Код приводить вряд ли есть смысл: там ровно то, что написано выше, только ещё менее наглядно (например, потому что логических флага зачем-то сделано два).  | 
	
		
 Вот код функции посылки запросов: 
	
function saveChanges() {
   var imgs = new Array();
   for (var i = 0; i < queries.length; i++) {
      imgs.push(new Image())
      imgs[i].src = queries[i]
   }
   var tries = 0;
   var timer = setInterval(function() {
      tries++
      requestComplete = true
      for (var i = 0; i < imgs.length; i++) {
         if (!imgs[i].complete) {
            requestComplete = false
         }
      }
      if (requestComplete) {
         clearInterval(timer);
         alert('Данные сохранены! Запросов выполнено: ' + queries.length)
         queries = []
      } else if (tries > 8) {
         clearInterval(timer);
      }
   }, 100);
   return false;
}
var requestComplete = false
А вот код, который выполняет ожидание перед сменой блока: 
elem.onclick = function() {
      if (queries.length && confirm('Вы хотите сохранить введённые данные?')) {
         saveChanges()
         var tries = 0;
         var timer = setInterval(function() {
            tries++
            if (requestComplete) {
               requestComplete = false
               clearInterval(timer)
               document.form1.action = 'edit.php'
               document.form1.from.value = pages * 25
               document.form1.submit()
            }
            if (tries > 10) {
               clearInterval(timer)
               alert('Ошибка запроса')
            }
         }, 200);
      } else {
         document.form1.action = 'edit.php'
         document.form1.from.value = pages * 25
         document.form1.submit()
      }
   }
Этот блок кода отвечает за переадресацию на последний блок данных, поэтому замыкания тут не используются. Я отредактировал неудачные на мой взгляд места, это исправленная версия. Однако на длинных запросах (29 записей сразу например) почему-то вылетает алерт с неудачной отправкой (при одиночных запросах всё ОК). Добавлено спустя 5 минут: Всё! Работает! Я всего лишь увеличил таймауты, и этого оказалось достаточно. Вот итоговый код: 
function saveChanges() {
   var imgs = new Array();
   for (var i = 0; i < queries.length; i++) {
      imgs.push(new Image())
      imgs[i].src = queries[i]
   }
   var tries = 0;
   var timer = setInterval(function() {
      tries++
      requestComplete = true
      for (var i = 0; i < imgs.length; i++) {
         if (!imgs[i].complete) {
            requestComplete = false
         }
      }
      if (requestComplete) {
         clearInterval(timer);
         alert('Данные сохранены! Запросов выполнено: ' + queries.length)
         queries = []
      } else if (tries > 8) {
         clearInterval(timer);
      }
   }, 500);
   return false;
}
var requestComplete = false
elem.onclick = function() {
      if (queries.length && confirm('Вы хотите сохранить введённые данные?')) {
         saveChanges()
         var tries = 0;
         var timer = setInterval(function() {
            tries++
            if (requestComplete) {
               requestComplete = false
               clearInterval(timer)
               document.form1.action = 'edit.php'
               document.form1.from.value = pages * 25
               document.form1.submit()
            }
            if (tries > 3) {
               clearInterval(timer)
               alert('Ошибка запроса')
            }
         }, 4000);
      } else {
         document.form1.action = 'edit.php'
         document.form1.from.value = pages * 25
         document.form1.submit()
      }
   }
 | 
	
		
 Чёрт... Рано обрадовался. Два столбца по 29 запросов уже не тянет. А должна тянуть максимум 25 таких столбцов! 
	Самое обидное, что пока я не ввёл эти проверки, запросы шли быстрее раз так в пять. :( Так и знал, что линейный обход - ужасный способ. И что мне теперь делать? Может, ничего не проверяя, поставить таймаут побольше (секунд 10)? Но тогда ждать юзеру придётся даже при маленьких модификациях базы, даже когда запрос всего один :(  | 
	
		
 вы проверяете завершенность по интервалу - ай ай ай. :nono:  
	
function saveChanges(callback) {
    var imgs = new Array(), i = 0, max = queries.length - 1;
    
    var timer = setInterval(function(){
        imgs.push(new Image);
        
         // обработчик загрузки для последней картинки
        if (i === max) imgs[i].onload = callback( imgs );
        
        imgs[i].src = queries[i];
        if( ++i > max ) clearInterval(timer);
        
    }, 100);
}
elem.onclick = function() {
    // для экономии места повторяющиеся операции занёс в функцию
    function normForm() {
        var a = document.form1;
        a.action = 'edit.php';
        a.from.value = pages * 25
        a.submit();
    };
    
    if (queries.length && confirm('Вы хотите сохранить введённые данные ? ')) {
        
        saveChanges(/*выполнится по завершении запроса*/function(a) {
            
            // a - массив картинок.
            alert('Данные сохранены! Запросов выполнено : '+a.length);
            queries = [];
            normForm();
        });
    } else {
        normForm();
    }
}
 | 
	
		
 Спасибо) Не сообразил, что onload есть не только у body :)  
	Туплю) P.S. Там код этого обработчика несколько сложнее (потому что при нажатии на разные кнопки вызываются разные блоки), но я допилю, всё ОК :)  | 
	
		
 Жаль, плюсик Вам в карму не отправить :) 
	 | 
	
		
 Да ёлки-палки... :-E  
	После такой переделки у меня теперь та же ситуация, что была в самом начале: пишется, но не всё. Я изучил лог-файл сервера. В большинстве случаев не хватает одного запроса, иногда один запрос отправляется на адрес undefined. Странно...  | 
	
		
 Ну я так и думал. Надо было поменять эти две строки местами: 
	if (i == max) imgs[i].onload = callback( imgs ); imgs[i].src = queries[i]; Походу до присваивания src интерпретатор считал рисунок загруженным (как раз по адресу undefined), и запускался callback, очищающий весь массив адресов запроса. В итоге запрос либо не уходил вовсе, либо уходил на адрес undefined. Настораживает ещё вот какой факт: иногда помимо запроса undefined не хватало ещё одного запроса. Поэтому вопрос к Вам: Вы уверены, что все предыдущие запросы успеют дойти? Обработчик-то мы привязали только к последнему :)  | 
	
		
 как они могут не дойти? картинки создаются в цикле - значит запросы так же создаются в цикле. посмотрите вкладку Network в инструменте веб-мастера 
	 | 
| Часовой пояс GMT +3, время: 04:42. |