函数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);
。
第三个参数(布尔值)是请求是否应该异步,这将是对数据的非DOM阻塞调用。