"너무 많은 재귀"오류가 발생합니다. 이 문제가 발생하는 실제 응용 프로그램에 명확한 아날로그를 제공하려고 노력할 것입니다.Firefox 3.6.6 및 4.0 베타 1에서 jQuery 사용자 정의 이벤트 및 너무 많은 재귀 오류가 발생했습니다.
앱이 매우 긴화물 열차의 내용에 대한 정보를 얻기 위해 웹 서비스를 호출하려고한다고 상상해보십시오. 우리가 단순히 웹 서비스를 호출 할 수없고 전체 열차의 모든 차량에 대해 모든 것을 한꺼번에 전송할 수는 없다는 많은 정보가 있습니다. 오히려 우리는 웹 서비스에 차례로 각 화물차에 대해 물어보고, 단일 boxcar에 대한 정보가 수신되면 페이지를 업데이트 한 다음 다음 차량을 요청합니다.
반응 클라이언트를 유지하기 위해, 우리는 대신) 루프를 방지하고 array.shift 이벤트를 (사용
우리는 이벤트가 :
$('body').bind('NextBoxCar', function(e, p) { getNexBoxCar(e,p); });
을 우리는 첫 번째 boxcarid을 제거하는 기능을 가지고 배열에서와 웹 서비스로 전송 :
EDIT: BoxCarIds is not a global but inside a function
function() foo {
var BoxCarIds = [123, 222, 767, 1234, 9298, ... 999];
$('body').triggerHandler('NextBoxCar', BoxCarIds);
}
function getNextBoxCar(e, BoxCarIds) {
var id = BoxCarIds.shift();
// build an ajax request; omitted for brevity
$.ajax({
.
. <snip>
.
success: function(data, textStatus, oHTTP) {
UpdatePage(data, BoxCarIds);
}
});
}
박스 카에 대한 데이터가 웹 서비스에서 돌아 오면, 아약스 성공 핸들러는 다음과 같은 함수를 호출, 그러면 페이지가 업데이트되고 NextBoxCar 이벤트가 발생합니다. 재귀 문제가 발생하는 곳이라고 생각합니다.
function UpdatePage(data, BoxCarIds) {
// update the page with data
.
. <snip>
.
// if there are still ids remaining in the array, we need to call the webservice again by firing the event
if (BoxCarIds.length > 0) {
$('body').triggerHandler('NextBoxCar', BoxCarIds);
}
}
재귀 문제를 방지하려면 어떻게해야합니까?
감사
에서만 발생하는 것으로 보입니다. setTimeout 팁을 가져 주셔서 감사 드리며 문제를 해결합니다. – Tim