2014-10-16 17 views
0

페이징 시스템에 ajax를 사용하는 웹 사이트가 있고 페이지 시스템이 hashchange 이벤트에 따라 작동하며 다른 페이지로 이동할 때마다 해시를 페이지 번호로 변경하는 함수를 호출합니다. 해시가 변경되면 해시 변경 이벤트가 발생하고 페이지 데이터를 가져 오는 함수를 호출합니다.
하지만 한 페이지 만 제외하고 완벽하게 작동합니다. 페이지를 3-4 회 이상 변경하면 페이지가 응답하지 않고 충돌 할 수 있습니다. Google 크롬의 Inspect 요소에서 네트워크 탭을 확인하면 표시됩니다. 페이지를 변경하면 아약스 요청 수가 두 배가되고 전송 된 데이터도 두 배가되어 메모리 누수가 발생합니다.
결국 문제를 해결할 수 있는지 확인하기 위해 해시 변경을하지 않고 페이징 작업을 시도하고 매력과 같이 작동했습니다.
나에게 무엇을 할 수 있을까요? 사전에 감사
hashchange 이벤트를 사용할 때 속도가 느려짐

hashchange 이벤트

$(window).bind('hashchange', function() { 
search(0); 
}); 

changehash 기능

function ChangeHash(p) { 
window.location.hash = p; 
} 

페이지 버튼

$('#Pages').append("<button type='button' class='btn btn-default"+active+"' Onclick=\"ChangeHash(" + a + ")\">" + a + "</button>"); 

답변

0

당신이 그것을 표시하지 않습니다 준 코드는하지만, 대부분의 가능성이 높습니다. 각 xhr 후에 해당 바인드 콜을 다시 실행해야합니다.

따라서 네트워크 로그가 나타내는 것과 같이 무의식적으로 이벤트를 이중, 3 중, 4 중으로 바인딩합니다. haschange는 브라우저가 충돌 할 때까지 2,3,4,5 ... 번 실행됩니다. 이를 방지하기 위해

,

$(window).bind('hashchange', function() { 
search(0); 
}); 

한 번만 실행되어 있는지 확인합니다.