문제

Window.Location을 PHP 파일로 설정하는 버튼이있어 피드를 생성 한 다음 다운로드합니다. 그러나 피드에 넣은 데이터로 인해 파일의 크기가 다양하므로 버튼 클릭부터 파일 대화 상자가 팝업되는 때때로 시간이 걸릴 수 있습니다.

내가 할 수있는 것은 버튼을 클릭하고 대화 상자 / 파일이 완료 될 때까지로드를 표시하는 것입니다.

어떤 아이디어라도 멋질 것입니다!

건배

도움이 되었습니까?

해결책

RSS가 원하는 스크립트를 생성하는 이미지를 보여주십시오 (출력 이미지의 HTML, 출력 버퍼를 플러시하고 데이터 생성을 시작하십시오). 데이터 생성이 끝나면 다음과 같습니다.

<?php
print '<script>window.location = "http://www.newlocation.com"</script>'

그게 다야.

다른 팁

왜 파일의 크기를 전혀 확인 해야하는지 잘 모르겠습니다. Ajax를 사용하여 동적으로 GET/POST를 수행하고, 당신이하고있는 모든 일이 일어나고있는 동안 로딩 아이콘을 보여 주려고하는 경우, 비동기 활동 표시기를 던지는 것은 상당히 간단합니다. 예를 들어 jQuery와 함께 :

$("#loading").ajaxStart(function(){
   $(this).show();
});

$("#loading").ajaxStop(function(){
   $(this).hide();
});

$("#feeds").load("feeds.php?id=89734258972347895");

위의 코드는 비동기 요청이 시작되고 중지 될 때 표시하고 숨기기 위해 ID "로드"가있는 DOM 객체를 설정합니다. .LOAD (URL) URL의 내용을 div #feeds에로드합니다. Content-Disposition : PHP를 사용하여 첨부 파일 헤더를 설정하는 경우 파일 다운로드 창이 Div에 비동기로로드 되었더라도 자동으로 시작됩니다. 물론 jQuery 없이도 가능합니다. 물론 브라우저 호환성 JavaScript가 많이 있으며 AjaxStart 및 AjaxStop 이벤트에 간단히 구독하여로드 IMG를 표시하고 숨기는 것만 큼 쉽지 않습니다.

조롱

Window.location을 설정하기 전에 GIF와 함께 숨겨진 div를 표시 할 수 있습니다.

구식이지만 서버 푸시로 매우 쉽게 수행 할 수 있습니다.

<?php
  $separator = "end_of_section_marker";
  header('Content-type: multipart/x-mixed-replace;boundary=$separator');
  print "\n--$separator\n";
  print "Content-type: text/html\n\n";
  // Send placeholder message here
  print "--$separator\n";
  ob_flush();
  flush();
  // Start long processing here
  print "Content-type: text/html\n\n";
  // send data here
  print "--$separator--\n";
?>

보내는 데이터에 대한 컨텐츠 유형을 조정하기 만하면됩니다. $ 분리기는 전송중인 데이터에 나타나지 않는 한 값이 될 수 있습니다.

내가 과거에 사용한 방법은 이와 같이 작동합니다 ...

  • Window.location을로드 페이지로 설정하고 쿼리 스트링의 대상 페이지를 전달하십시오. 로딩 페이지에는 애니메이션 GIF 또는 처리가 진행되고 있음을 입증하는 것을 선호하는 모든 것을 표시해야합니다. 로딩 페이지는 쿼리 스트링에 전달 된 대상 페이지로 즉시 리디렉션해야합니다 (다른 해당 쿼리 스트링 매개 변수와 함께).

편집 : 로딩 페이지는 javaScript를 사용하여 대상 페이지로 리디렉션해야합니다 (쿼리 스트링에 제공된 URL에 대한 set window.location). 서버 측에서 리디렉션하면 로딩 페이지가 표시되지 않기 때문에 이것은 중요한 점입니다.

편집 2 :로드 페이지가 PHP 파일 인 경우, 다운로드 된 파일의 크기를 확인하고 사용자에게 예상 다운로드 시간 (애니메이션 "로드"GIF) 또는 What Not을 표시 할 수 있습니다.

  • 대상 페이지는 버퍼링 활성화로 렌더링해야합니다 (콘텐츠를 렌더링하기 전에 OB_START () 호출). 버퍼링이 활성화되면 전체 페이지가 렌더링 될 때까지 브라우저에 전송되지 않습니다. 한편 1 단계의 로딩 페이지는 계속 표시됩니다.

다운로드하는 파일의 정확한 크기를 찾으려면 서버에 통신하려면 Ajax를 사용해야합니다. 그런 다음 테스트 할 것이 있습니다. 클라이언트 측에서만 예상 페이로드의 크기를 알 수있는 방법은 없습니다.

Iframe을 사용하여 피드를로드 한 다음 간격을 사용하여 iframe/문서의 준비 상태를 확인할 수 있습니까? 그래서 과정은 다음과 같습니다.

  • 너비와 높이가 100% 인 iframe과 iframe 위의 하중을 포함하는 창을로드하십시오.
  • iframe.contentwindow.document.readystate 속성에 대한 타이머 검사를 설정하십시오
  • ReadyState == 완료되면 파일 저장 대화 상자를 표시하십시오.

한 가지 단점은 대부분의 브라우저의 경우 PHP 파일이 동일한 도메인에 있어야한다는 것입니다 (즉, iframe의 ReadyState 속성을 확인할 수 있음).

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