2010-02-22 4 views
3

저는 아약스를 사용하는 초보자이며 항상 완전히 비동기라고 생각했습니다. 그러나 호출이 페이지 재로드 또는 페이지 변경 (예 : 하이퍼 링크 클릭)으로 중단 될 수 있음을 발견했습니다. 나는 아약스 호출이 시작될 때 브라우저가 나중에 무엇을 하든지 상관없이 실행된다는 인상을 받았다. 틀렸어?호출이 페이지로드에 의해 중단되었습니다.

이제 특정 문제에 대해 : 사용자가 질문에 답하는 온라인 테스트를 생각해보십시오 (텍스트 상자에 입력). 텍스트 상자에 포커스가 없으면 텍스트 상자의 값을 DB에 유지하는 ajax 호출이 트리거됩니다. 텍스트 상자간에 변경하면 잘 작동합니다. 그러나, 나는 또한 다른 페이지 (그것은 제출 버튼)에 게시 작업을 triggeres 제출 버튼이 있습니다. 내가 입력란에 무엇인가를 입력하고 나중에 버튼을 클릭하면 호출이 수행되지 않습니다. 또한 텍스트 상자에 입력하고 다른 곳을 클릭하면 (통화도 시작) 신속하게 제출 버튼을 클릭하면 전화도 걸리지 않습니다. 그것은 예상 된 행동인가?

첫 번째 장소에서 아약스를 사용하는 이유는 브라우저 충돌과 같이 예상치 못한 일이 발생하면 이미 입력 된 텍스트가 이미 저장되어 있으므로 값을 유지하는 것입니다.

내 사고 방식이 잘못 되었나요? 이 문제를 어떻게 해결할 것입니까?

감사합니다.

+0

큰 질문입니다! –

답변

1

영구 로컬 저장 장치로 특별한 작업을 수행하지 않으면 현재 페이지에 새 페이지가로드 될 때 모든 javascript 및 ajax 호출이 날아갑니다. 또한 양식을 제출할 때도 마찬가지입니다.

페이지 내부 작업을 저장하려면 가능한 빨리 데이터를 저장하십시오. 예를 들어 어쩌면 초점을 잃을 때뿐만 아니라 타이머를 사용하여 키 - 업을 저장할 수도 있습니다.

다시 제출 : 클릭 행동을 처음 저장하도록 변경 한 다음 새 페이지로 이동하십시오.

보고있는 모든 효과는 정상입니다.

또한,

2

AJAX 비동기 모두 느린 (즉, 6 또는 7) 빠른 브라우저 (크롬)에서 테스트해야합니다.

AJAX 요청을 보내면 자바 스크립트 엔진이이를 전송하고 응답 처리기를 설정합니다.

그러나 서버에 AJAX 요청을 보낸 다음 페이지를 받기 전에 페이지에서 벗어나면 아무 일도 일어나지 않습니다. 왜? 각 페이지로드시 전체 Javascript 환경이 붕괴되고 다시 초기화되므로 마지막 페이지에서 어떤 일이 발생했는지 전혀 알 수 없습니다.

문제의 경우 양식 제출 작업을 가로 채고 데이터로 수행해야하는 작업을 수행하고 다음에 양식을 제출하십시오.

편집 : 귀하의 코멘트에 대한 응답입니다. 당신이 올바른지. Ajax 요청이 보내지고 리턴 값에 의존하지 않는다면 중요하지 않습니다.

Firebug으로 문제를 디버그하여 이 제대로 전송되는지 확인하고 서버가 올바르게 처리하고 있는지 확인하는 것이 좋습니다.

+1

그러나이 예제에서는 반환 값에 대해 신경 쓰지 않습니다. 서버가 아무 것도 반환하지 않습니다. 비동기 (true) 비동기의 나의 이해는 호출이 "디스패치"되 자마자 서버로가는 길이며 브라우저/사용자가 더 이상 인터럽트 할 수 없다는 것입니다. 그러나 당신의 대답을 읽을 때, 자바 스크립트가 인터럽트를 막기 위해 전화를 다시 붙잡고있는 것처럼 보입니다. 그러나 얼마나 오래 그리고 왜? –