显示模式加载分区未在谷歌浏览器和IE浏览器中运行,火狐是确定火狐、分区、器中、加载

2023-09-10 22:08:05 作者:寻梦者@

我想显示请稍候,装载纺纱过程中处理SOAP调用循环。我有一个在谷歌Chrome和Internet Explorer的9,10,11显示模式屏幕的一个问题。 Firefox是确定。

如果我删除 $(机构)removeClass移除(装载); someMethodSOAP() ,载入画面显示在谷歌Chrome和IE浏览器是正确的。

SOAP调用的持续时间为1秒,因此加载屏幕应该显示。

我要显示在谷歌Chrome和IE浏览器加载屏幕,但我不知道该怎么办呢?为什么Firefox浏览器工作正确的,谷歌Chrome和IE浏览器呢?

我用: [jQuery的2.1.1] [ HTTP://$c$c.jquery。 COM / jQuery的-2.1.1.js ] [jquery.soap 1.3.8] [ http://plugins.jquery.com/soap/ ] 从[模式窗口的解决方案:;请等候,正在下载...&QUOT [ jQuery和QUOT;动画?]

感谢你。

我的code:

的index.php

 <!DOCTYPE HTML>
< HTML>
< HEAD>
< META HTTP-当量=内容类型内容=text / html的;字符集= UTF-8>

<风格类型=文本/ CSS>
    .modal {
    显示:无;
    位置:固定;
    的z-index:1000;
    顶部:0;
    左:0;
    高度:100%;
    宽度:100%;
    }

    / *当身体有装载类,我们把
       滚动条了与溢出:隐藏* /
    body.loading {
        溢出:隐藏;
    }

    / *任何时候身体已经装载的类,我们的
       模态元件将可见* /
    body.loading .modal {
        显示:块;
    }

    div.modal DIV {
        位置:绝对的;
        顶部:50%;
        左:50%;
        宽度:20%;
        高度:10%;
        保证金:-5%0 0〜10%;
        文本对齐:中心;
    }
< /风格>

<脚本的charset =UTF-8SRC =jQuery的-2.1.0.min.js>< / SCRIPT>
&所述;脚本的charset =utf-8的src =jquery.soap.js>&所述; /脚本>

<脚本>
    VAR WEB_SERVICE_URL ='路径SOAP';

    功能someMethodSOAP(ID){
        VAR XML;
        $ .soap({
            网址:WEB_SERVICE_URL,
            方法:TestMethod的,
            appendMethodToURL:假的,
            异步:假的,
            数据: {
                ID:身份证,
            },
            beforeSend:函数(的SoapEnvelope){
                $(机构)addClass(装载)。 //装载开启
            },
            成功:函数(SOA presponse){// OK
                XML = SOA presponse.toString();
            },
            错误:函数(SOA presponse){//故障:
                XML = SOA presponse.toString();
            }
        });

        $(机构)removeClass移除(装载)。 //加载关闭

        返回XML;
    }

    $(窗口).load(函数(){
        /*$("body").addClass("loading);
        $(机构)removeClass移除(装载); * /

        someMetodSOAP(1);
    });
< / SCRIPT>

< /头>
<身体GT;
    < D​​IV CLASS =模式> <! - 装 - >
        < D​​IV>
            &所述; IMG SRC =htt​​p://i.stack.imgur.com/FhHRx.gif'>
        < / DIV>
    < / DIV>
< /身体GT;
< / HTML>
 
将IE 谷歌 火狐浏览器设为默认浏览器

编辑: 我试试这个code(下同),但仍然没有工作。 行为:方法test_loading CALL方法在服务器上,这期间5秒。这code等待(异步:假的),5秒后,网页浏览器显示加载。我不明白。装载的是显示在 someMetodSOAP(5); 完成,但我想在 someMetodSOAP显示加载(5);

 <脚本>
    $(窗口).load(函数(){

        $(机构)addClass(装载)。

        someMetodSOAP(5);

        //$("body").removeClass("loading);
    });

    VAR WEB_SERVICE_URL ='../soap_nu.php';

    功能someMetodSOAP(二){

        VAR XML;
        $ .soap({
            网址:WEB_SERVICE_URL,
            方法:test_loading
            appendMethodToURL:假的,
            异步:假的,
            数据: {
                parametr:第二
            },
            beforeSend:函数(的SoapEnvelope){
            },
            成功:函数(SOA presponse){
                XML = SOA presponse.toString();
            },
            错误:函数(SOA presponse){
                XML = SOA presponse.toString();
            }
        });

        返回XML;
    }
< / SCRIPT>
 

解决的: 我发现递延对象是:(我没有信誉为这个链接,抱歉)api.jquery.com/category/deferred-object/。它帮助我。 我希望能够帮助您:

 <!DOCTYPE HTML>
< HTML>
< HEAD>
< META HTTP-当量=内容类型内容=text / html的;字符集= UTF-8>

<风格类型=文本/ CSS>
    .block {显示:块重要}
    #loading {
        显示:无;
        /*等等。例如CSS微调* /
    }
< /风格>

&所述;脚本的charset =utf-8的src =jquery.min.js>&所述; /脚本>
&所述;脚本的charset =utf-8的src =jquery.soap.js>&所述; /脚本>

<脚本>
    VAR WEB_SERVICE_URL ='路径SOAP';

    功能someMethodSOAP(ID){
        变种D = $ .Deferred();

        $ .soap({
            网址:WEB_SERVICE_URL,
            方法:TestMethod的,
            appendMethodToURL:假的,
            异步:真正的,
            数据: {
                ID:身份证,
            },
            成功:函数(SOA presponse){// SOAP OK
                尝试 {
                    d.resolve(SOA presponse.toString());
                }赶上(五){
                    d.reject(SOAP_THROW);
                }
            },
            错误:函数(SOA presponse){// SOAP错误:
                尝试 {
                    d.reject(SOA presponse.toString());
                }赶上(五){
                    d.reject(SOAP_THROW);
                }
            }
        });

        返回d.promise();
    }

    $(窗口).load(函数(){
        //创建一些承诺
        VAR承诺=新的Array();
        promises.push(someMethodSOAP(1)); //只有一个诺言

        $(#加载)addClass(块)。 //启动加载
        $ .when.apply($,承诺).done(功能(XML){//解析
            $(#加载)removeClass移除(块)。 //完成加载
            /*通过*/
        }),失败(功能(XML){//拒绝
            $(#加载)removeClass移除(块)。 //完成加载
            /*失败*/
        });
    });
< / SCRIPT>

< /头>
<身体GT;
    < D​​IV ID =加载> <! - 装 - >
        < D​​IV><! -  CSS微调 - >< / DIV>
    < / DIV>
< /身体GT;
< / HTML>
 

解决方案

您需要删除异步:假,然后它会正常工作

I would like to show "please wait, loading" spinning circle during process SOAP call. I have a problem with show modal screen in Google Chrome and Internet Explorer 9,10,11. Firefox is OK.

If i remove $("body").removeClass("loading"); from someMethodSOAP(), loading screen show correct in Google Chrome and IE.

Duration of SOAP call is one second, so loading screen should be show.

I want to show loading screen in Google Chrome and IE, but i do not know how to do it? And why Firefox browser working correct and Google Chrome and IE not?

I use: [jQuery 2.1.1][ http://code.jquery.com/jquery-2.1.1.js ] [jquery.soap 1.3.8][ http://plugins.jquery.com/soap/ ] [modal window solution from:[ jQuery "Please Wait, Loading..." animation? ]

Thank you.

my code:

index.php:

<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">

<style type="text/css">
    .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;
    }
</style>

<script charset="UTF-8" src="jquery-2.1.0.min.js"></script>
<script charset="UTF-8" src="jquery.soap.js"></script>

<script>
    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.toString();
            },
            error: function (SOAPResponse) {            //FAULT:
                xml = SOAPResponse.toString();
            }
        });

        $("body").removeClass("loading");                //loading turn off

        return xml;
    }

    $(window).load(function() {
        /*$("body").addClass("loading");
        $("body").removeClass("loading");*/

        someMetodSOAP(1);
    });
</script>

</head>
<body>
    <div class="modal"> <!-- loading-->
        <div>
            <img src="http://i.stack.imgur.com/FhHRx.gif'">
        </div>
    </div>
</body>
</html>

EDIT: I try this code (below), but still not working. Behavior: Method test_loading CALL method on server, which during 5 seconds. This code waiting (async:false) 5 seconds and after web browser show loading. I do not understand it. Loading is show after someMetodSOAP(5); is completed, but I want to show loading before someMetodSOAP(5);.

<script>
    $(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.toString();
            },
            error: function (SOAPResponse) {
                xml = SOAPResponse.toString();
            }
        });

        return xml;
    }
</script>

SOLVED: I found deffered-object from: api.jquery.com/category/deferred-object/ (I do not have reputation for this link, sorry.). It help me. I hope that help you:

<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">

<style type="text/css">
    .block {display: block !important}
    #loading {
        display: none;
        /*etc. for example css spinner*/
    }
</style>

<script charset="UTF-8" src="jquery.min.js"></script>
<script charset="UTF-8" src="jquery.soap.js"></script>

<script>
    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.toString());
                } catch(e){
                    d.reject(SOAP_THROW);
                }
            },
            error: function (soapResponse) {        //SOAP FAULT:
                try {
                    d.reject(soapResponse.toString());
                } 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*/
        });
    });
</script>

</head>
<body>
    <div id="loading"> <!--loading-->
        <div><!-- css spinner --></div>
    </div>
</body>
</html>

解决方案

you need to remove async: false, then it will work fine.

 
精彩推荐