2010-07-28 2 views
5

내 페이지가 지금까지 한 번로드 된 다음 거기에서 모두 AJAX입니다. 아기 : D. 이렇게 분명히, 뒤로/앞으로/reload/history/bookmarking은 심각하게 그것을 깨뜨린다. 일부 솔루션 (jQuery 플러그인, 일명 BBQ 또는 Address)을 연구 중이며 구현 방법에 대해 궁금합니다.AJAX 백 버튼 구현 : 어떻게 작동합니까?

내가 진지하게 관심을 갖고있는 것은 Back/Forward 기능입니다. 이것은 업무 조정에 도움이되는 어쩌면 5-6 명이 사용할 수있는 진정한 "앱"이므로 결코 모양이나 형태가 아닙니다. 문서". 평균적인 사용자의 익숙한 창 조작 습관으로 인해 내 앱이 손상되는 것을 방지하려고합니다.

지금까지 두 개 이상의 주에서 다른 주를 입력 할 수있는 상황이 발생하지 않았으므로 반환 기능은 구현하기가 매우 쉽습니다. 반환 기능은 "뒤로"기능을 사용하여 구현되지 않았지만 취소, 뒤로 및 다른 버튼을 통해서만 구현되었습니다.

하지만 나는 빗나간다. 지금까지는 역/전방 기능을 허용하는 간단한 URL 단편 식별자 시스템에 대한 아이디어가 정말 마음에 들고, 다른 사람들의 코드를 문제에 던지지 않도록하고 싶다. webapp 그리고 나는 배우기 위해 가능한 한 고통스럽게 모든 것을하려고 노력하고있다).

좋아, 더 이상 무시하지 마라 ... 타이머를 사용하여 창 URL을 폴링하고 적절한 AJAX 작업을 트리거 할 수있는 콘텐츠로 this article의 느낌을 받았습니다. 내가 알고 관심이 무엇

은 다음과 같습니다

  1. AJAX의 뒤로/앞으로 파손 유사한 방법을 사용하지 않을 경우 고정 일반적인 플러그인, 그들은 어떤 방법을 사용하는 경우?
  2. 찬성은 무엇입니까? 단점. 폴링 방법 및 대안 방법 중 하나를 선택합니다.
  3. 내 목표를 달성 할 수있는 간단한 방법을 구현할 수 있습니까? (150 줄 이하).
  4. 직접 할 가치가 있습니까? 내가 이것을 구현하면 가치있는 것을 배울 것인가? 내 (이론적으로) 단순한 버전이 포괄적 인 플러그인보다 훨씬 적은 코드일까요?
+1

나는 진짜 질문에 대해 확실하지 않지만, 내가 너라면, 나는 플러그인을 사용하고 바퀴를 다시 만들지 않을 것이다. 나는 플러그인을 쓰는 데 시간을 보낸 프로그래머 (들)가 "지옥 이니깐, ​​적어도 이걸 쓰는 고통을 다른 사람들에게 줄 것이다"라고 생각하고 있었거나, 그냥 보드 일 뿐이었다.) – Ben

+0

그래, 미안, 내가 썼을수록 나는 내 자신의 질문을 더 잘 이해할 수있을 것이다. 그것의 본질은 입니다. 1) 웹 프로그래밍을 진지하게 배우고 자하는 사람의 관점에서 일반적인 플러그인/방법으로 수정 된 AJAX에 의해 어떻게/back/forward/reload/bookmark/history 기능이 깨졌습니다. 2) 각 방법의 장점은 무엇입니까? 3) 비 hackish 방식으로 원하는 기본 기능 만 포함하는 자체 버전을 구현할 수 있습니까? 좋아, 그럼 어쩌면이게 아무것도 전혀 지우지는 않지만 그걸로 지옥! –

답변

2

AJAX의 뒤로/앞으로 파손 유사한 방법을 사용하지 않을 경우 고정 일반적인 플러그인, 그들은 어떤 방법을 사용하는 경우?

그들은 모두 폴링과 hashchange 이벤트를 사용합니다.

장점은 무엇입니까? 단점. 폴링 방법 및 대안 방법 중 하나를 선택합니다. 폴링의

  • 장점 : 그것은 크로스 브라우저 폴링
  • 단점은 그래서 모든 브라우저 hashchange을 지원합니다 더 비싼 성능면에서

내가 구현할 수 내 목표를 달성 할 수있는이 방법의 간단한 버전? (150 줄 이하).

응용 프로그램을 5 명 만 작성하는 경우 hashchange 이벤트를 지원하는 최신 브라우저를 사용해야 할 수도 있습니다. 그런 다음 당신은 그것을 나 자신을 할 가치가 2-3 라인 :

window.onhashchange = function(event) { 
    var url = event.newURL; 
    // do something with new url 
}; 

의 해시 변경 감지를 쓸 수 있습니까? 내가 이것을 구현하면 가치있는 것을 배울 것인가? 내 (이론적으로) 단순한 버전이 포괄적 인 플러그인보다 훨씬 적은 코드일까요?

예, 위 참조. 당신은 코드의 극히 일부 라인에서 더 나은 구현을 직접 작성할 수 있습니다. 예를 들어 레일스는 router을 사용하여 요청을 컨트롤러에 전달합니다. 경로는 다음과 같이 정의된다 :

 
"/signup"   -> (UsersController, new) 
"/user/(id)/photos" -> (PhotosController, index) 

당신은 경로와 자바 스크립트에서의 핸들러 함수/객체를 등록하고 기존의 플러그인으로 가능하다보다 더 차가운 일을 많이 할 수있는 자신의 라우팅 API를 정의 할 수 있습니다, 당신의 제한 상상력 :

+0

나는 hashchange에 매우 흥미가 있습니다. 불행히도,이 응용 프로그램은 주로 기업 환경에서 사용되며 나는이 경우 IE7 인 lcd에 코드를 작성해야합니다. 빠른 Google에서 그것은 해시 변경이 IE8에서 지원되지만 IE7에서는 지원되지 않는 것 같습니다. 다국적 기업을 위해 IT를 설득하는 것이 재미있을 것입니다. 그러나 그것은 새로운 IE를위한 시간입니다! –