2015-10-08 1 views
-1

У меня есть функция, которая реализует несколько httprequest. Мне нужно обновить родительское окно и закрыть текущее окно, когда все эти запросы будут выполнены. Но теперь текущее окно закрывается перед выполнением запросов, и запрос не заканчивается правильно. Вот мой код:Функция вызова Javascript, когда заканчивается другая асинхронная функция

<script> 
     function save() 
     { 

      $.when(insert()).done(function() { 
       opener.location.reload(); 
       window.close(); 
      }); 

     } 

     function insert() 
     { 
      $('select').each(function() { 
       var idTraslado = $(this).attr("id"); 
       var accion = $(this).val(); 

       //the page realizes mysql updates. 
       xmlhttp = new XMLHttpRequest(); 
       xmlhttp.open("GET","trasladosEliminarMultipleGuardar.php?idTraslado="+idTraslado+"&accion="+accion+"&motivo="+motivo,true); 
       xmlhttp.send(); 
      }); 
     } 
    </script> 
+1

https://www.promisejs.org/ ли вы поиск по крайней мере? –

+1

__Why__ вы делаете raw 'XMLHttpRequest', если у вас есть jQuery ?! – Mathletics

+0

Как я могу сделать это с помощью jquery? –

ответ

1

Вы должны использовать обещания иначе when не бесполезен в вашем коде:

function save() 
{ 
    $.when(insert()).done(function() { 
     opener.location.reload(); 
     window.close(); 
    }); 
} 

function insert() 
{ 
    var promises = []; 
    $('select').each(function() { 
     var deferred = $.Deferred(); 
     var idTraslado = $(this).attr("id"); 
     var accion = $(this).val(); 

     //the page realizes mysql updates. 
     xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onload = function (response) { 
      deferred.resolve(response); 
     }; 
     xmlhttp.open("GET", "trasladosEliminarMultipleGuardar.php?idTraslado=" + idTraslado + "&accion=" + accion + "&motivo=" + motivo, true); 
     xmlhttp.send(); 
     promises.push(deferred.promise()); 
    }); 
    return promises; 
} 
+0

Разве это не будет разрешено при завершении первого запроса ajax? что будет с остальными? –

+0

правый! не заметил, что отредактирует с помощью aproach, который вернет массив обещаний – taxicala