Javascript 浏览器冻结函数调用Jquery

Javascript 浏览器冻结函数调用Jquery,javascript,jquery,Javascript,Jquery,函数loadPage会导致浏览器在每次加载时冻结 如果我取消注释$(“#responsedcontainer”).load(“widget.php”) 它不会导致浏览器冻结,但如果使用函数loadPage,它会冻结。如果只是使用加载功能,则其他函数都不会运行 我对jquery的使用非常有限,并且正在努力学习。希望这是有意义的 var beforeLoadData = []; function loadPage( url ){ var ajax = new XMLHttp

函数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);
    });
var beforeLoadData=[];
函数加载页(url){
var ajax=new-XMLHttpRequest();
open(“GET”,url,false);
send(null);
$(“#responsedcontainer”).html(ajax.responseText);
}
函数saveTableData(){
beforeLoadData=[]
$(“td.change”)。每个(函数(){
beforeLoadData.push({“key”:$(this.attr('id'),“value”:$(this.text()});
}); 
}
函数getSavedValueFor(键){
for(预加载数据中的var i){
if(在加载数据[i]之前)。键===键)
返回i;
}
返回-1;
}
函数checkTableData(){
$(“td.change”)。每个(函数(){
var thisValue={“key”:$(this.attr('id'),“value”:$(this.text()};
var index=getSavedValueFor(thisValue.key);
如果(索引>=0){
if(在加载数据[index].value>thisValue.value之前)
$(“td#“+thisValue.key).addClass('updated');
if(在加载数据[index].value
ajax.open(“GET”,url,false)
应该是
ajax.open(“GET”,url,true)


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

jQuery有一个内置的
$.ajax()
函数为什么要创建XMLHttpRequest对象?这可能是冻结的原因,因为较旧的浏览器不支持该对象,使用了
ActiveXObject
,我认为还有另一个原因如果我改为true,页面根本不会加载,这是因为您使用的是AJAX,所以脚本没有按顺序执行;对于要调用的响应,AJAX请求没有附加回调。我建议您只使用jQuery的内置AJAX方法来处理这个问题。很抱歉我不知道,我尝试了以下代码:
function loadPage(url){$.AJAX({url:url,cache:false}).done(function(html){$(“#responsedcontainer”).html(html)}
,但是这些函数不会调用。对不起,我不太了解jquery。