2010-04-10 3 views
2

나는 긴 폴링 ajax 호출을 연속적으로 만들려고한다. 내가 현재하고있는 문제는 이전 호출의 콜백 함수에서 각각의 연속 호출을 작성한다는 것입니다. 이게 문제 야? 파이어 버그는 내 아약스 호출이 완료된 것으로 표시하지 않으며 심지어 데이터가 반환되고 콜백이 실행된다고 생각합니다. 재귀 구조는 비효율적 인 것처럼 보입니다. 어떤 아이디어? 당신이 긴 폴링 그런 식으로 할 상황 및 구현에 따라 당신이 스택 오버 플로우를 얻거나 적어도 부족할 수있는 경우에재귀 콜백 함수가없는 백 - 투 - 백 아약스 긴 폴

window.addEvent('domready', function() 
{ 
    server = new Request({ 
    url: "chat.php", 
     method: 'get', 
     link: 'ignore', 
     onSuccess: callback, 
    }); 

    request = server.send(); 
} 

function callback(data) 
{ 
    console.log(data); 
    var data = JSON.decode(data); 
    messId = data.max; 
    for(var i = 0; i < data.messages.length; i++) 
    { 
     print("", data.messages[i].text); 
    } 
    var sendString = "messId="+messId; 
    request = server.send(sendString); 
} 
+0

urs의 일부 코드가 도움이 될 수 있습니다 ... –

+0

요청을 처리하기 위해 iframe을 사용하는 iframe을 사용하는 경우 요청을 보려면 '넷'패널로 이동해야합니다. 콘솔 패널에 표시된 – Dapeng

답변

1

당신은, 당신은 어떤 목적을 위해 스택과 폐쇄를 유지하는 권리가있어 메모리 ... 비록 내가 그 다양한 js 구현 (예 : 꼬리 재귀가 그 문제가 사라질 것입니다) 수행하는 최적화에 대해 잘 모르겠지만.

쉬운 대안은 현재 범위가 해석 될 때 funcName 함수를 즉시 호출하는 window.setTimeout(funcName)을 전역 범위에서 사용하는 것입니다.

+0

그래서 바꿨습니다 : request = server.send (sendString); with : window.setTimeout ("recieve()"); 이며 기능이 아직 완료되지 않았습니다. – Teddy

+0

대기, 비동기 요청이므로 콜백 함수가 완료되어야합니다. – Teddy

+0

예, 완료해야합니다. 요청이 시간 초과되는 경우가 아니라면 ... 완료하는 대신? 적어도 마지막 줄을이'window.setTimeout (function() {server.send (sendString)};)로 변경하려고 할 수 있습니다. 호출이 재귀 적이라고 생각하지 않지만 브라우저 HTTP 요청은 비동기입니다. –

관련 문제