javascript - 函数调用 Jquery 时浏览器卡住

标签 javascript jquery

函数 loadPage 导致浏览器在每次加载时卡住。

如果我取消注释 $("#responsedcontainer").load("widget.php"); 它不会导致浏览器卡住,但如果使用函数 loadPage 它会。如果只使用加载功能,其他功能都不会运行。

我的 jquery 非常有限,正在努力学习。希望这是有道理的。

var beforeLoadData = [];

    function loadPage( url ){
        var ajax = new XMLHttpRequest();
        ajax.open("GET", url , false);
        ajax.send(null);
        $("#responsedcontainer").html( ajax.responseText );
    }

    function saveTableData(){
        beforeLoadData = []       
        $("td.changeable").each( function(){
            beforeLoadData.push( { "key": $(this).attr('id'), "value": $(this).text() } );
        }); 
    }

    function getSavedValueFor( key ){
        for( var i in beforeLoadData ){
            if( beforeLoadData[i].key === key )
                return i;
        }
        return -1;
    }

    function checkTableData(){
        $("td.changeable").each( function(){
            var thisValue = { "key": $(this).attr('id'), "value": $(this).text() };
            var index = getSavedValueFor( thisValue.key );
            if( index >= 0){
                if( beforeLoadData[index].value > thisValue.value )
                    $( "td#"+thisValue.key ).addClass( 'updated' );
                if( beforeLoadData[index].value < thisValue.value )
                    $( "td#"+thisValue.key ).addClass( 'minus' );  
                } 

        });
    }

    function removeUpdatedClass( ){
        setTimeout( function(){
            $('td.updated').removeClass('updated');
            $('td.minus').removeClass('minus');
        },4000);
    }


    $(function(){
        saveTableData();
        //$("#responsedcontainer").load("widget.php");
        loadPage( "widget.php" );
        checkTableData();
        removeUpdatedClass();
        var refreshId = setInterval(function() {
            saveTableData();
            //$("#responsedcontainer").load("widget.php?randval="+ Math.random());
            loadPage("widget.php?randval="+ Math.random());
            checkTableData();
            removeUpdatedClass();
        }, 5000);
    });

最佳答案

ajax.open("GET", url , false);应该是 ajax.open("GET", url , true); .

第三个参数( bool 值)是请求是否应该是异步的,这将是对数据的非 DOM 阻塞调用。

关于javascript - 函数调用 Jquery 时浏览器卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18523507/

相关文章:

javascript - 将数组从 Controller 传递到 Javascript

javascript - Angular 如何设置输入类型文件的样式

javascript - 将 require.js 与 rsvp 结合使用时出现未捕获的 ReferenceError : RSVP is not defined , 错误

javascript - 数组数组困惑

javascript - Ajax返回页面Html代码返回(相同代码)

javascript - ReactJS 表单渲染问题

jQuery Ajax Post - 打印您刚刚在回调中发布的数据

jquery - WordPress 网站上的响应图像

javascript - fb.login 在后台运行对话框?

动态创建的文本框上的 jQuery 按键事件