2014-10-14 1 views
3

나는 ajax 호출을 사용하여 메시지를로드하는 헤더에서 각 페이지에 메시지를 보내는 응용 프로그램을 만들었습니다.여러 탭에 대해 ajax 호출을 정규화하는 방법은 무엇입니까?

반감이 다른 동작을 반복했습니다.

30 분마다 서버에 대한 새 요청이 시작되었습니다.

사용자가 여러 탭에서 응용 프로그램을 열면 각 탭이 새 알림/메시지 확인을 위해 서버에 요청을 시작한다는 것을 알게되었습니다.

그래서 각각의 새 탭은 1 개의 추가 요청을 생성합니다.

어떻게 상태를 정상화합니까?

내 말은 --- 서버에 대한 단일 요청을 모든 사용자가 여러 탭을 열고 알림을 확인하고 메시지의 각 열린 탭에서 데이터를 업데이트하려는 경우입니다.

+0

사용자가 내 앱에서 새 탭을 열어서 창 사이에 postMessage를 사용할 수있는 기회를 제공합니다. – charlietfl

+0

@charlietfl 더 자세히 설명 할 수 있습니까? –

+0

새 탭이'window.open'을 사용하여 열리는 경우 각 창에서 다른 탭에 액세스 할 수 있습니다 – charlietfl

답변

2

아마도 어떤 탭이 활성화되어 있는지를 확인할 수 있고 활성 탭에서 요청을 보내고 결과를 localstorage에 저장할 수 있습니다. 그리고 u가 다른 탭을 업데이트 할 수 있도록 EventListener를 localstorage에 추가하십시오.

+0

네,이게 작동합니다 ... 나는 stackoverflow에서 같은 유형의 질문을 발견했습니다. 실제로 당신의 대답은 나에게 검색을 제안했습니다. 감사. 여기 http://stackoverflow.com/questions/1760250/how-to-tell-if-browser-tab-is-active –

1

매개 변수마다 값과 타임 스탬프를 쿠키에 저장하고 요청을 보내기 전에 확인할 수 있습니다. 로컬 저장소를 사용하여이를 수행 할 수도 있습니다. http://www.html5rocks.com/en/features/storage

+1

논리적으로 나는 이것이 효과가 있다고 생각한다. 하지만 인터넷 연결이 느린만큼 요청 및 응답이 1 분 이상이 필요하면이 작동하지 않을 것이라고 생각합니다. 또는 귀하의 요청이 지연되면 동일한 문제가 발생할 수 있습니다. 이 경우 –

+0

에서 서버를 요청한 첫 번째 사용자는 다른 탭이 동일한 작업을 수행하지 못하도록 쿠키에 플래그를 설정할 수 있습니다. 몇 초 후 다시 확인하고 첫 번째 탭에서 답을 얻고 쿠키를 편집 할 때까지 다시 반복합니다. 그게 너에게 도움이 되겠니? AFAIK, 탭간에 메시지를 교환하는 쿠키보다 좋은 방법은 없습니다. – briice

+0

예, 브라우저에 로컬로 데이터를 교환 할 수있는 옵션이 없기 때문에 옳습니다. 하지만 요청에 대한 제한을 추가해야합니다. –

관련 문제