Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » JS не успевает выполниться

Страниц (1): [1]
 

1. Serhio - 03 Февраля, 2017 - 09:41:10 - перейти к сообщению
Все привет!

Вот код:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. for(var p in obj.param0){
  3.   $.post( "file.php", {param: param} ,
  4.        function(result2) {
  5.           .... 
  6.        }
  7.   );
  8. }
  9. window.location.reload();
  10.  
  11.  


Так вот, содержимое в функции не успевает выполнится как происходит перезагрузка страницы. Что делать?
2. teleoperator27 - 03 Февраля, 2017 - 09:53:27 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. window.location.reload();
я полагаю это должно быть внутри цикла
3. Serhio - 03 Февраля, 2017 - 10:24:27 - перейти к сообщению
teleoperator27 пишет:
CODE (htmlphp):
скопировать код в буфер обмена
  1. window.location.reload();
я полагаю это должно быть внутри цикла



Тогда он не пробежится по всем "p" из цикла и после первой итерации перегрузит страницу. По идее он должен быть вне цикла, как и сделано, однако аналогично, происходит перезагрузка ранее, чем выполнятся все итерации цикла. Я не понимаю как работает js в этом плане. Что не так?
4. teleoperator27 - 03 Февраля, 2017 - 10:43:21 - перейти к сообщению
CODE (javascript):
скопировать код в буфер обмена
  1. function(){
  2. for(var p in obj.param0){
  3.   $.post( "file.php", {param: param} ,
  4.        function(result2) {
  5.           ....  
  6.        }
  7.   );
  8. }
  9. window.location.reload();
  10. }

може так
5. Sail - 03 Февраля, 2017 - 10:45:41 - перейти к сообщению
Serhio пишет:
содержимое в функции не успевает выполнится как происходит перезагрузка страницы

Запрос-то асинхронный.
6. Serhio - 03 Февраля, 2017 - 10:46:24 - перейти к сообщению
сейчас посомтрю
(Добавление)
Sail пишет:
Serhio пишет:
содержимое в функции не успевает выполнится как происходит перезагрузка страницы

Запрос-то асинхронный.


Во! то-что нужно! Действительно, и что в таких случаях делается. Как перегрузить после выполнения всех асинхронных запросов? Цикл for отправляется ассинхронный запрос 10 раз и прекрасно исполняет их если нет перезагрузки страницы. Как сделать перезагрузку страницы после выполнения всех асинхронных запросов из цикла? Есть способы?
7. Sail - 03 Февраля, 2017 - 10:53:48 - перейти к сообщению
Serhio пишет:
Как сделать перезагрузку страницы после выполнения всех асинхронных запросов из цикла? Есть способы?
Проще всего - "глобальный" счётчик успешно выполненных запросов увеличивать при выполнении функции success.
По достижении нужного результата - выполнять требуемое действие.
8. Serhio - 03 Февраля, 2017 - 10:54:31 - перейти к сообщению
teleoperator27 пишет:
CODE (javascript):
скопировать код в буфер обмена
  1. function(){
  2. for(var p in obj.param0){
  3.   $.post( "file.php", {param: param} ,
  4.        function(result2) {
  5.           ....  
  6.        }
  7.   );
  8. }
  9. window.location.reload();
  10. }

може так



Нет, не так.
(Добавление)
Sail пишет:
Serhio пишет:
Как сделать перезагрузку страницы после выполнения всех асинхронных запросов из цикла? Есть способы?
Проще всего - "глобальный" счётчик успешно выполненных запросов увеличивать при выполнении функции success.
По достижении нужного результата - выполнять требуемое действие.



Спасибо. Никогда не сталкивался. Можете для примера пару методов чиркануть, покапаю...
з.ы. всегда $post использовал. А если запросов не 10 а N? как узнать окончание цикла for в данном слчае?)
9. armancho7777777 - 03 Февраля, 2017 - 17:11:08 - перейти к сообщению
CODE (javascript):
скопировать код в буфер обмена
  1. (function(url, params, callBack){
  2.  
  3.     var xhrList = $.map(params, function(param){
  4.         return $.get(url, {param: param});
  5.     });
  6.  
  7.     $.when.apply(null, xhrList).done(function(){
  8.         callBack($.map(arguments, function(args){
  9.             return $.isArray(args[0]) ? [args[0]] : args[0];
  10.         }));
  11.     });
  12.    
  13. })('file.php', obj.param0, function(responseList){
  14.  
  15.     console.log(responseList);
  16.     // location.reload();
  17.  
  18. });

 

Powered by ExBB FM 1.0 RC1