2012-03-27 2 views
1

Excel로 내보낼 JQGrid의 일부 데이터가 있습니다. 그래서, 우리는 자바 서블릿을 작성하여 Excel에 데이터를 쓰고 다시 보냅니다. 클라이언트 측에서는 JSON 데이터를 전송하여 AJAX JSONP 요청을 사용하고 있습니다. 내가 만든 서블릿과 서블릿을 클라이언트에 다시 보낼 수있다. 그러나 나는 클라이언트 측에서 탁월한 출력이나 어떤 종류의 출력도 볼 수 없습니다.JQuery Excel 내보내기 문제

피들러를 사용하고 http 호출을 관찰 할 때 응용 프로그램에서 결과를 수신 한 것으로 나타났습니다. 그러나 여전히 결과를 보여주지는 않습니다.

내가받은 결과 헤더가 여기에 있습니다. 엑셀 jQuery를 사용으로

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Content-Disposition: attachment; filename=PistonData.xls 
Content-Type: application/vnd.ms-excel 
Content-Length: 6144 
Date: Tue, 27 Mar 2012 08:49:04 GMT 

어떻게 이런 결과를 열지? 누군가이 문제를 해결할 수있는 방법을 제안 해 주실 수 있습니까?

업데이트 # 1 내가이 문제에 대한 해결책을했다 올렉의 제안에 따라 경찰의 요청을

$.ajax({ 
     type: "POST", 
     dataType: "jsonp", 
     contentType:'application/vnd.ms-excel', 
     url: "http://devmachine:9010/axis/SPSServlet", 
     data: param, 
     success: function (dataToSend) { 
      alert(dataToSend); 
     } 
    }); 

업데이트 # 2 을 포함하도록 잊어 버렸습니다.

여기 내 코드입니다 :

<form id="frmExcelExport" style="display:none;"> 
     <input type=hidden id="partId" name="partId" /> 
     <input type=hidden id="columnNames" name="columnNames" /> 
     <input type=hidden id="data" name="data" /> 
    </form> 

$('#columnNames').val(colModStr); 
$('#partId').val(currentPartID); 
$('#data').val(dataStr); 

var urlForExport = "http://devmachine:9010/axis/SPSServlet";   
$('#frmExcelExport').attr("method", "post"); 
$('#frmExcelExport').attr("action", urlForExport); 
$('#frmExcelExport').submit(); 

그것은 아주 좋은 노력하고 있습니다. Oleg에게 감사합니다 !!!! 파일을 다운로드 할 jQuery를 사용하려는 경우

답변

1

HTTP POST을 사용하는 경우 Excel을 열 수 없다고 생각합니다. 웹 브라우저 의지 PistonData.xls로 반환 된 데이터가 등록 된 응용 프로그램과 관련하여 Content-Disposition 헤더에 지정된 열리는 방식으로

window.location = "http://devmachine:9010/axis/StdPartSearchServlet?" + 
    $.param({someParamName: "someValue", anotherParam: 123}); 

: 작동하는 방법은 URL에 필요한 HTTP GET 및 인코딩 매개 변수를 사용하는 것입니다 application/vnd.ms-excel (헤더 참조). 자세한 내용은 the answer을 참조하십시오.

서버에서 반환 된 XLS 데이터의 제어되지 않은 캐싱을 방지해야하는 경우 HTTP 프록시를 다시 확인하지 않고 캐싱하지 못하도록 추가 HTTP 헤더 "Cache-Control: max-age=0" 또는 더 나은 "Cache-Control: private, max-age=0"을 설정하는 것이 좋습니다. 자세한 내용은 here, here을 참조하십시오.

+0

하지만 get 메소드를 사용하면 서버에 많은 레코드를 보낼 수 없습니다. 권리? 최악의 경우, 나는 서비스하기 위해 500 레코드를 보내야합니다. – Dinesh

+0

@Dinesh : 데이터의 이진 스트림을 보내야합니다.일반적으로 'Content-Encoding'을 'UTF-8'로 설정하고 'UTF-8'로 인코딩 된 'PistonData.xls'데이터를 전송합니다. 그래서 나는 당신이 의미하는 기록을 이해하지 못합니다. – Oleg

+0

@Dinesh : 정말 도움이 될지 모르겠지만 [대답] (http://stackoverflow.com/a/9349688/315935) Open XML SDK 2.0을 사용하는 전체 C# 코드를 게시 한 후 xlsx를 생성합니다. 서버 및 반환 내 대답에 설명 된 것처럼 반환됩니다. 클라이언트에서 서버로 – Oleg

0

, 어쩌면 당신은 여기에 표시되어야합니다

http://www.filamentgroup.com/lab/jquery_plugin_for_requesting_ajax_like_file_downloads1

이것은 당신이 원하는 것을 할 수있는 작업 조각을 가지고있다.

+0

JQGrid 내용을 Excel로 내보내고 싶습니다. – Dinesh

+0

그런 경우 위에서 언급 한 코드 스 니펫이 사용자가 찾고있는 것일 수 있습니다. – Steve

+0

해야합니다. 그러나 그것은 결과를 얻는 신호를 보이지 않는 탁월함을 열지 않고있다. – Dinesh