2016-08-26 3 views
1

다양한 함수 호출을 시도했지만 EmberJs에서 CSV 다운로드를 트리거하는 방법을 파악할 수 없습니다.EmberJs에서 CSV 파일 다운로드

let endpoint = '/api/foo/'; 
let options = { 
    url: endpoint, 
    type: 'POST', 
    data: {}, 
    dataType: 'text' 
}; 
return new Ember.RSVP.Promise((resolve, reject) => { 
    options.success = function(result) { 
     var uri = 'data:application/csv;charset=UTF-8,' + encodeURIComponent(result); 
     window.open(uri, 'foo.csv'); 
    }; 
    options.error = (xhr, errorThrown) => { 
    console.log('error'); 
    // return Ember.run(null, reject, this.didError(xhr, xhr.status, xhr.responseJSON, 1)); 
    }; 
    Ember.$.ajax(options); 
}); 

은이 코드는 서버 나 클라이언트 측 오류를 발생하지 않습니다

여기 내 최신 코드입니다. 200 응답을 얻고 있습니다. javascript 오류가없고 콘솔 로그가 없으므로 오류 블록이 발생하지 않습니다. 하지만 ... 클라이언트에서 파일 다운로드가 실행되지 않습니다. 아무도 빠진 것을 압니까?

+0

귀하의 요청에 특별한 것이 있습니까? 아니면 간단한 URL 호출입니까? 나는 downloadOrdersCSV를 호출하기 위해 {{action "downloadOrdersCSV"}} 액션을 사용하고 있습니다 : function() {window.open ("yoururl", '_ blank');} –

답변

0

테스트 할 수 없지만 new 약속을 반환하는 것이 문제라고 생각하지만 실제로 원하는 것은 약속 자체를 반환하는 것입니다.

그래서 당신의 코드를 변경 : 기능의 유사한 부분을 구현에서

let endpoint = '/api/foo/'; 
let options = { 
    url: endpoint, 
    type: 'POST', 
    data: {}, 
    dataType: 'text' 
}; 
return Ember.RSVP.Promise((resolve, reject) => { // note the deletion of new 
    options.success = function(result) { 
     var uri = 'data:application/csv;charset=UTF-8,' + encodeURIComponent(result); 
     window.open(uri, 'foo.csv'); 
    }; 
    options.error = (xhr, errorThrown) => { 
    console.log('error'); 
    // return Ember.run(null, reject, this.didError(xhr, xhr.status, xhr.responseJSON, 1)); 
    }; 
    Ember.$.ajax(options); 
}); 
0

, 나는 다른 경로에 들어갑니다. AJAX 요청을 작성하는 대신 양식을 작성하여 서버에 제출합니다. 내 API 엔드 포인트는 적절한 Content-Disposition 헤더를 사용하여 응답에서 CSV를 리턴하고 브라우저는 파일을 다운로드 만합니다.

(인증 체계에 따라 양식 데이터에 값으로 인증 토큰을 포함해야 할 수도 있음).

아래의 예제 코드. 내가 인증 토큰을 추가하는 것을 볼 수 있습니다. 양식의 작업 URL은 페이지의 마크 업에서 설정되지만 원하는 경우 여기에서 동적으로 설정할 수 있습니다.

csvDownload() { 
    let form = Ember.$('#csvdownloadform') 
    let input = Ember.$('#csvdownloadtoken') 
    input.val(this.get('session').get('session.content.authenticated.token')) 
    form.submit() 
    input.val('') 
    form_func.val('') 
}, 
관련 문제