<!-- Site.Master -->
    <div id="loading" class="loadStyle">
        <table style="width:100%; margin-top:300px">
            <tr align="center" style="height:100px; width:100%">
                <td style="width:40%"></td>
                <td style="width:20%; background-color: White;">
                    <img src="<%= Url.Content("~/Content/Image/spinner.gif")%>" alt="Loading" id="Img2" />
                    <br />
                    <span style="font-size:medium; color:Black">Processing.....</span>
                </td>
                <td style="width:40%"></td>
            </tr>
        </table>
    </div>
var ajaxObj = false;
var reStr = "";
function getOs() {
    var OsObject = "";
    if (navigator.userAgent.indexOf("MSIE") > 0) {
        return "MSIE";       //IE浏览器   
    }
    if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0) {
        return "Firefox";     //Firefox浏览器   
    }
    if (isSafari = navigator.userAgent.indexOf("Safari") > 0) {
        return "Safari";      //Safan浏览器   
    }
    if (isCamino = navigator.userAgent.indexOf("Camino") > 0) {
        return "Camino";   //Camino浏览器   
    }
    if (isMozilla = navigator.userAgent.indexOf("Gecko/") > 0) {
        return "Gecko";    //Gecko浏览器   
    }
}
function createAjaxObj() {
    try{
        xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
    }catch(e){
        try{
            xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(E){
            xmlObj = new XMLHttpRequest();
        }
    }
    return xmlObj;
}
function ShowLoading() {
    var windowHeight = document.all ? document.getElementsByTagName("html")[0].offsetHeight : window.innerHeight;
    var height = document.body.offsetHeight > windowHeight ? document.body.offsetHeight : windowHeight;
    $("#loading").height(height);
    $("#loading").width(document.body.offsetWidth);
    $("#loading").show();
}
function HideLoading() {
    $("#loading").hide();
}
function getReturnData() {
    if (ajaxObj.readyState == 4) {
        if (ajaxObj.status == 200) {
            reStr = ajaxObj.responseText;
        }
    }
}
function getAjaxResponse(url, postData) {
    ShowLoading();
/*这里alert()放开,就能正常弹出覆盖层, 注释掉,就弹不出来(或者说是弹出和隐藏是同时发生的,所以看不到)*/
  //alert("test");  
    var reData = "";
    var osType = getOs();
    ajaxObj = createAjaxObj();
    if (ajaxObj) {
        ajaxObj.open('POST', url, false);
        ajaxObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        ajaxObj.setRequestHeader("Cache-Control", "no-cache");
        ajaxObj.onreadystatechange = osType == "Firefox" ? getReturnData() : getReturnData;
        ajaxObj.send(postData);
        ajaxObj.onreadystatechange = osType == "Firefox" ? getReturnData() : getReturnData;
    }
    HideLoading();
    return reStr;
}测试环境IE8,很苦恼,有什么办法可以模拟alert()的阻断效果吗???????

解决方案 »

  1.   

    这样可以么ShowLoading();
    window.setTimeout(function()
    {
     var reData = "";
        var osType = getOs();
        ajaxObj = createAjaxObj();
        if (ajaxObj) {
            ajaxObj.open('POST', url, false);
            ajaxObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            ajaxObj.setRequestHeader("Cache-Control", "no-cache");
            ajaxObj.onreadystatechange = osType == "Firefox" ? getReturnData() : getReturnData;
            ajaxObj.send(postData);
            ajaxObj.onreadystatechange = osType == "Firefox" ? getReturnData() : getReturnData;
        }},5000);  HideLoading();
        return reStr;
      

  2.   

    如果使用jquery的话,你的代码就简单了。
    1. 不需要写适用各浏览器的代码
    2. jquery的ajax里面,直接有一个属性支持在加载数据完毕前的事件定义:$.ajax({
                url: GetUrl("Delete", "ArbitrageRule"),
                data: { ruleId: id },
                beforeSend: function () { CloseWindow(); ShowMessage("删除中"); },
                success: function (x) {
                    if (x.rs) {
                        location.href = location.href.split("#")[0];
                    }
                    else {
                        CloseWindow();
                        Alert(x.msg);
                    }
                }
            });
      

  3.   

    beforeSend: function () { CloseWindow(); ShowMessage("删除中"); },
      

  4.   

    你这个标题很奇怪,覆盖层和Ajax冲突? 为什么要用alert模拟?
    JS也可以断点调试的,另外对于你现在自己建XmlHttpRequest对象的方式,
    JQuery确实是比较好的选择。
      

  5.   

    如何显示Ajax请求时的数据加载过程提示:Loading...这个貌似可以,不过我没验证。
      

  6.   


    function getReturnData() {
        if(ajaxObj.readyState <4){
             /*在这里弹出层。至于太快看不到效果的话你可以在你post的页面设置Tread.Sleep(3000)休眠几秒在
    继续执行下去
    */
        }
        if (ajaxObj.readyState == 4) {
            if (ajaxObj.status == 200) {
                reStr = ajaxObj.responseText;
            }
        }
    }
      

  7.   

    如果 是 加载图片, 你就做个 延时呗setTimeout('HideLoading',3000)
      

  8.   

    当然这只是在测试中看load的状态,肯定要测试下load的样式是否是我们定义的吧?
    具体实行的话肯定不用加载这个,考虑到服务器处理过程的响应时间,带宽,等等,很少有机会操作一下就立即输出返回的。
      

  9.   

    jquery里有个ajaxLoad()方法,
    也在项目里有用到,
    只是某些特别的地方,
    必须要用上面的方法.项目里这个地方的AJAX时间足够长,
    所以需要弹出来屏蔽其他操作的,
    现在不明白为啥加ALERT就可以弹出,
    不加就不弹出,
    哎,
    目前没有人能答在重点上啊
      

  10.   

    不加弹不出的原因可能返回太快,导致看不见
    至于加了alert就可以弹出,是因为弹出alert之后
    只要你不按确定,整个javascript程序执行流程都将被挂起停止,直到按下alert的确定在继续执行。
      

  11.   

    所以要求得一个方法来模拟alert()的阻断效果撒,
    上面说的sleep方法是不行的,那个是并行的
      

  12.   

    还是用JQUERY的.load()方法做掉咯