문제

내부 시스템에 1 일 데이터에서 몇 년으로 돌아올 수있는 보고서가 있습니다. 이로 인해 보고서는 모든 것을 생성하는 데 0.5 초 또는 45 초 이상 걸릴 수 있습니다.

이 보고서를 통해 수정 될 때 Ajax 요청을 매우 간단하게 발사 할 수있는 필터를 수정할 수 있습니다.

var ax = $.ajax({
    type: "GET",
    url: "/blah",
    data: values,
    success: function(data) { .. }
});

이제 우리의 훌륭한 사용자가 "오 잠깐! 나는 이것을 1 월이 아닌 2 월부터 시작하기를 원한다"고 말할 때 문제가 발생합니다. 그러나 1 월 이후로 요청은 이미 많은 데이터입니다! 따라서 사용자는 날짜 옵션을 2 월로 전환하고 JavaScript 콘솔이 두 번째 요청을 보내는 것을 볼 수 있습니다. 이제 우리는 두 가지가 있고 그것은 a입니다 경주!

/report/? start_date = 1 월 (여전히로드 ...)

/report/? start_date = 2 월 (이봐, 나도 여기 있어요!)

그런 다음 보통 작은 것이 더 빨리로드되지만 다른 하나는로드하고 이미 가지고있는 것을 과도하게 작성합니다. 흠 :)

사용해 보았습니다 ax.abort() 선언 후 배치 ax 언급 된 바와 같이 변수 여기 그러나 그것은 작동하지 않는 것 같습니다.

이제 내가 무엇을 놓치고 있는지 궁금합니다. 사용자가 일부 옵션을 변경하자마자 현재 요청을 죽이고 싶습니다 (클라이언트 측, 서버 측에서 아무것도 할 수 없다는 것을 알고 있습니다). . 환경 async: false 사용자를 잠그는 옵션이 아닙니다.

도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

당신은 AjaxManager 플러그인.

다른 팁

이전 요청을 중단하려는 것은 좋은 해결책이 아니라고 생각합니다. JavaScript의 각 AJAX 요청 증가 카운터에 대해 간단한 해결 방법을 사용하고 AJAX 콜백으로 전달해야 할 수도 있습니다. 콜백이 발생하는 경우 응답 카운터가 현재 카운터 값과 동일한 지 확인하십시오. 그렇지 않은 경우 응답을 무시하십시오. 구식 클릭 이벤트로 해고되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top