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