2012-01-16 5 views
0

동적으로 생성되는 turbogears의 애플리케이션이 서버에 파일로 저장되지 않고 콘텐츠 유형 및 기타 헤더가 설정되므로 Excel 스프레드 시트가 생성되므로 잘 작동합니다. jquery를 사용하여 다운로드를 트리거 할 수 있는지 여부입니다. 여기처럼 보이는 것입니다 : 내 브라우저에 URL로 갈 때jquery를 사용하여 동적으로 생성 된 콘텐츠를 다운로드하십시오.

def get_xl(self, **search): 
    response.headers['Content-type'] = "application/ms-excel" 
    response.headers['Content-Disposition'] = "attachment;filename=myfile.xls" 
    book = Workbook() 
    ... code that puts stuff in rows ... 
    return book.biff_data() 

이 그렇게 데이터를 반환, 그것은 다운로드를 트리거 그러나, 나는 몇 가지 데이터를 게시해야하고, 그것은 모든 경우에 좋은 것 jquery로 처리 할 수 ​​있습니다. 이것은 내가 지금까지 JQuery와 측면에 무엇을, 나는 알고하지만 모든 잘못 :

var fields = $('#search-form').serializeObject(); 
    if (!fields.length) { 
     alert("Dude, you must search for something."); 
     return false; 
    } 
$.get('/get_xl',fields.data); 

답변

1

대신 이것에 대한 jQuery를 사용하는 쿼리 문자열 매개 변수를 받아들이는 get_xl 방법을 변경하려고하고 그냥 일반 팔자 '자바 스크립트를 사용하여 /get_xl?params_here의 URL을 설정 -이 브라우저에서 저장/실행 다운로드 대화 상자를 트리거합니다.

var fields = $.param('#search-form'); 
    if (!fields.length) { 
     alert("Dude, you must search for something."); 
     return false; 
    } 

window.location.href = '/get_xl?' + fields; 
+0

나는이 접근 방법을 사용했습니다. –

0

당신은 양식 요소를 삽입하고 게시하거나 숨겨진 필드에 GET 할 데이터를 추가하고 트리거하여이 작업을 수행 할 수 있습니다 제출 이벤트.

보내는 헤더가 다운로드를 시작하고 다운로드 길이가 적절하게 표시되도록 Content-Length도 보내십시오.

+0

좋아, 난 그냥 내가 방화범의 반응을 볼 수 있습니다 같은 일이 일어 :(,은, 확인 응답 길이를 설정하지만 다운로드를 트리거 실 거예요. –

+0

이 사용 jQuery를 수행 할 어떤 이유가 그냥 폼을 가리키는 것보다 get_xl? – Callum

+0

큰 쿼리를 수행하는 API가 있고, 폼에는 2 개의 버튼이 있고, 폼을 게시하고 아약스를 사용하여 데이터를 반환하며, 다른 버튼은 동일한 매개 변수를 사용하여 Excel 파일을 다운로드하기위한 것입니다. , 그것은 jquery없이 할 수 있지만 그것을 사용하는 것이 좋을 것입니다. –

0

나는 여기서 벗어날 수 있지만, 내가하려고하는 것은 .ajax() 함수를 사용하여 아약스를 통해 양식을 게시하고 호출중인 페이지에서 데이터를 다시 수신하는 것입니다.

$.post('your-excel-gen-page.py', $('#search-form').serialize(), 
     function(data){ 
      if(data.success == true){ 
           // Update iframe using .load() function 
      }else{ 
       // Fail 
      } 
     }, "json"); 

저는 파이썬 프로가 아니지만, 과거에 PDF 생성 및 PHP 페이지로이 작업을 수행했습니다. 페이지에 게시하면 페이지를 호출하고 파일 다운로드를 시작해야합니다. 그래도 작동하지 않으면 페이지의 iframe에 ajax 호출의 반환 내용을 채워 넣을 수 있습니다. 이것은 성공과 함께 수행 될 수 있습니다 : function과 .load. 시도해 볼 가치가 있습니다.

관련 문제