2011-11-16 2 views
11

난 레일 애플 리케이션이 있고 나는 pjax 요청으로 이상한 행동을 계속하고있다. 개발 로그를 살펴보면 두 가지 요청이 이루어지고 있음을 알 수있었습니다. 첫 번째 요청은 pjax이고 다음 요청은 그렇지 않습니다. 결과적으로 페이지가 여전히 다시로드됩니다.jquery pjax 두 번 요청하기

누구든지이 문제를 도와 주시면 감사하겠습니다.

+2

질문에 대한 설명이 부족합니다. 관련 코드, 로그 파일 또는 기타 자료를 게시하십시오. – Bojangles

+0

나는 같은 문제에 직면 해있다. 나는 예를 [cloudfoundry에 여기] (http://scaffolding.cloudfoundry.com/book/list)에서 볼 수있다. 페이지 매김 및 테이블 정렬 링크는 pjax 여야하지만 방화 광구를 사용하면 전체 페이지가 새로 고쳐지면서 하나의 XHR 요청을하는 것을 관찰 할 수 있습니다. 그곳에서 돌아가고있는 앱의 소스 코드는 [GitHub on] (https://github.com/robfletcher/grails-enhanced-scaffolding/tree/pjax)에 'grails.list.js'라는 관련 파일이있을 것입니다. –

+1

Firebug 필자는 pjax의 기본 성공 처리기가 내가 제공 한 조각 선택기를 사용하여 모든 콘텐츠를 찾지 못했다는 것을 입증했습니다. 이 경우 [pjax code] (https://github.com/defunkt/jquery-pjax/blob/master/jquery.pjax.js#L106)에서 전체 페이지 새로 고침을 수행합니다. 왜 AJAX 응답을 잘 나타납니다 및 선택기 유효하기 때문에 선택기 작동하지 않는 명확하지 않다. –

답변

14

JQuery pjax 플러그인에는 대상 페이지를 다시로드하는 기본 오류 처리기가 있습니다. 이 에러 핸들러는 타임 아웃이 지나면 호출되며, pjax는 매우 낮게 설정됩니다. 따라서 요청에 시간이 너무 오래 걸리면 두 가지 동일한 요청이 표시됩니다. pjax 요청 (아마도 _pjax 속성이 설정된 경우), 다른 pjax가 아닌 요청이 뒤 따른다. 브라우저에서 전체 페이지가 다시로드되는 것을 볼 수 있습니다.

내 상황에서 발견 한 한 가지 점은 응답 자체가 그다지 오래 걸리지 않았다는 것입니다. 그러나 반환 된 HTML에는 플래시가 포함되었습니다. 플래시 embed가로드되기 전이나 후에 pjax 코드가 응답을 얻는 지 확실하지 않습니다. 이 문제를 해결하기

, 나는이 직접 pjax를 호출, 물론

$.pjax({ 
     url: xhr.getResponseHeader('Location'), 
     container: '#container', 
     timeout: 4000 // pick a suitable timeout 
     }); 

...처럼 보이도록 내 PJax 코드를 변경했습니다. 직접 호출하지 않는 경우 비슷한 솔루션을 찾아야합니다.

+0

내 삶을 살렸다! :) 그것은 두 가지 요청을 보내지는 않았지만 단순히 첫 번째 취소하고 다시로드 .. 어쨌든 - 완벽하게 작동합니다! –

1

저는이 문제도 해결했습니다. 브라우저 캐싱과 관련된 문제 인 것 같습니다. 나는 기록을 지우고 캐시하면 Chrome에서 그 일이 멈추는 것으로 나타났습니다. 아직 해결할 수 없었지만 브라우저 캐싱을 사용 중지하는 것과 관련이 있다고 생각합니다.

+1

내 문제는 요청이 시간 초과되었음을 나타냅니다. 전달 시간 초과 : 2000 pjax 함수에서 나를 위해 그것을 해결했습니다. 또한 레이아웃의 일부에 빈 pjax 컨테이너가 있음을 발견했습니다. 내가 그 조각으로 이동했을 때 브라우저 콘솔에 오류가 발생했습니다. 나는 빈 스팬 요소를 넣어서 고칠 수 있었다. – andrewajo