Afficher le chargement modal div n’est pas en cours d’exécution dans les navigateurs Google Chrome et IE, Firefox est ok

Je voudrais montrer “veuillez patienter, chargement” du cercle en rotation pendant le processus d’appel SOAP. J’ai un problème avec show modal screen dans Google Chrome et Internet Explorer 9,10,11. Firefox est OK.

Si je supprime $("body").removeClass("loading"); de someMethodSOAP() , l’affichage de l’écran de chargement est correct dans Google Chrome et IE.

La durée de l’appel SOAP étant d’une seconde, l’écran de chargement doit être affiché.

Je veux afficher l’écran de chargement dans Google Chrome et IE, mais je ne sais pas comment le faire? Et pourquoi le navigateur Firefox fonctionne correctement et que Google Chrome et IE ne le sont pas?

J’utilise:
[jQuery 2.1.1] [ http://code.jquery.com/jquery-2.1.1.js ]
[jquery.soap 1.3.8] [ http://plugins.jquery.com/soap/ ]
[Solution de fenêtre modale de: [ Comment puis-je créer une animation “Veuillez patienter, Chargement …” à l’aide de jQuery? ]

Je vous remercie.

mon code:

index.php :

      .modal { display: none; position: fixed; z-index: 1000; top: 0; left: 0; height: 100%; width: 100%; } /* When the body has the loading class, we turn the scrollbar off with overflow:hidden */ body.loading { overflow: hidden; } /* Anytime the body has the loading class, our modal element will be visible */ body.loading .modal { display: block; } div.modal div { position: absolute; top:50%; left:50%; width: 20%; height: 10%; margin:-5% 0 0 -10%; text-align: center; }     var WEB_SERVICE_URL = 'path to SOAP'; function someMethodSOAP(id) { var xml; $.soap({ url: WEB_SERVICE_URL, method: "testMethod", appendMethodToURL:false, async: false, data: { ID: id, }, beforeSend: function (SOAPEnvelope) { $("body").addClass("loading"); //loading turn on }, success: function (soapResponse) { //OK xml = soapResponse.toSsortingng(); }, error: function (SOAPResponse) { //FAULT: xml = SOAPResponse.toSsortingng(); } }); $("body").removeClass("loading"); //loading turn off return xml; } $(window).load(function() { /*$("body").addClass("loading"); $("body").removeClass("loading");*/ someMetodSOAP(1); });       

MODIFIER:
J’essaie ce code (ci-dessous), mais ne fonctionne toujours pas.
Comportement: Méthode test_loading Méthode CALL sur le serveur, qui dure 5 secondes. Ce code attend (async: false) 5 secondes et après le chargement du navigateur Web. Je ne comprends pas. Chargement en cours après someMetodSOAP(5); est terminé, mais je veux montrer le chargement avant someMetodSOAP(5); .

  $(window).load(function() { $("body").addClass("loading"); someMetodSOAP(5); //$("body").removeClass("loading"); }); var WEB_SERVICE_URL = '../soap_nu.php'; function someMetodSOAP(second) { var xml; $.soap({ url: WEB_SERVICE_URL, method: "test_loading", appendMethodToURL:false, async: false, data: { parametr: second }, beforeSend: function (SOAPEnvelope) { }, success: function (soapResponse) { xml = soapResponse.toSsortingng(); }, error: function (SOAPResponse) { xml = SOAPResponse.toSsortingng(); } }); return xml; }  

RESOLU: J’ai trouvé un object différé de: api.jquery.com/category/deferred-object/ (je n’ai pas la réputation de ce lien, désolé.). Ça m’aide J’espère que cela vous aidera:

      .block {display: block !important} #loading { display: none; /*etc. for example css spinner*/ }     var WEB_SERVICE_URL = 'path to SOAP'; function someMethodSOAP(id){ var d = $.Deferred(); $.soap({ url: WEB_SERVICE_URL, method: "testMethod", appendMethodToURL:false, async: true, data: { ID: id, }, success: function (soapResponse) { //SOAP OK try { d.resolve(soapResponse.toSsortingng()); } catch(e){ d.reject(SOAP_THROW); } }, error: function (soapResponse) { //SOAP FAULT: try { d.reject(soapResponse.toSsortingng()); } catch(e){ d.reject(SOAP_THROW); } } }); return d.promise(); } $(window).load(function() { //create some promises var promises = new Array(); promises.push(someMethodSOAP(1)); //only one promise $("#loading").addClass("block"); //start loading $.when.apply($, promises).done(function(xml){ //Resolve $("#loading").removeClass("block"); //finish loading /*PASS*/ }).fail(function(xml){ //Reject $("#loading").removeClass("block"); //finish loading /*FAIL*/ }); });    

vous devez supprimer async: false , alors cela fonctionnera correctement.

Vous devez supprimer la classe de loading uniquement une fois l’appel terminé. Une fois l’appel terminé et la réponse reçue, il exécute la fonction succès / échec. Essaye ça.

 $.soap({ url: WEB_SERVICE_URL, method: "testMethod", appendMethodToURL:false, async: false, data: { ID: id, }, beforeSend: function (SOAPEnvelope) { $("body").addClass("loading"); //loading turn on }, success: function (soapResponse) { //OK xml = soapResponse.toSsortingng(); $("body").removeClass("loading"); }, error: function (SOAPResponse) { //FAULT: xml = SOAPResponse.toSsortingng(); $("body").removeClass("loading"); } });