2009-07-16 2 views
1

http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/#xmlhttprequestAJAX readystate가 깨지고 AJAX가 데이터를 충분히 빠르게 처리하지 못합니까?

4로드 데이터 전송이 완료되었습니다.

readyState == 4

나는 W3 스쿨에서 AJAX 프레임 워크를 사용했다.

행 그룹에서 데이터를 처리하려고합니다. (양식 필드). 양식 요소를 반복하여 아약스 스크립트로 보냅니다. 그런 다음 ajax 스크립트는 get을 통해 데이터를 처리하는 PHP 페이지로 데이터를 보냅니다. 처리가 완료되면 데이터는 함수가 호출 된 원래 페이지로 다시 표시되어야합니다.

"이 작업을 완료하는 데 필요한 데이터를 아직 사용할 수 없습니다."라는 오류 메시지가 나타납니다. 마지막 행의 결과 만 표시됩니다. 함수는 개별 기지에서 올바르게 작동하지만 하나 이상의 행을 반복하려고하면 오류가 발생합니다.

function stateChanged5() 
{ 

    if (request5.readyState==4) 
    { 
     document.getElementById(displayElem).innerHTML=request5.responseText; 
    } 
    else 
    { 
     document.getElementById(displayElem).innerHTML=""; 
    } 
} 

준비 상태는 마지막 행을 제외하고 여기에서 깨졌습니다. 위의 코드를 여기에 넣으려고하면이 작업을 완료하는 데 필요한 데이터가 아직 제공되지 않습니다. 이것은 PHP 페이지가 아약스가 반환하고 다음 반복을 위해 제 시간에 표시 할만큼 충분히 빠르게 데이터를 처리하지 않는다는 결론에 도달 한 방법입니다.

답변

0

재귀 ...

var counter = 0; 

function makeRequest() { 
    var xhr = // yada yada yada, get your XmlHttpRequest instance 
    xhr.onreadystatechange = function() { 
    if(this.readyState == 4) { 
     // Do whatever, based on the counter variable 
     counter += 1 
     if(counter < 5) 
     makeRequest(); 
    } 
    else { 
     // Do whatever, based on the counter variable 
    } 
    } 
    xhr.open(); 
} 
+0

make 요청은 포럼에서 요소 이름으로 전달됩니다. 원래 페이지에서 while 루프는 폼 요소의 배열을 반복하고 makerequest 함수에 전달합니다. 재귀가 어떻게 설정을하는 방식으로 작동합니까? makeRequest를 다시 호출 할 수는 없기 때문에 동일한 요소가 될 것입니다. – payling

+0

사용할 요소를 파악하려면 카운터 변수를 사용해야합니다. 지금 설정하는 방법을 조정해야합니다 (묵시적 - 작동하지 않는다는 가정하에). –

+0

설정에보다 적합한 답변을 원할 경우 더 많은 코드를 게시해야합니다. 여기에는 독자가 없습니다. –

1

다음 행 요청을 시작하기 전에 각 행의 결과가 돌아올 때까지 기다립니다.

+0

어떻게 그런 일을 가겠어요? – payling

+0

재귀 사용. 내 대답을 보라. –

관련 문제