我试图将一些数据发送回我的应用程序,而无需离开现有页面。我宁愿不重新加载当前页面。
该应用程序已经有一个下载选项,按照我想要的方式工作...按钮的工作原理如下
<button type="button" onclick="javascript:window.location='/DownloadEndpoint?params'">Download</button>
这将转到下载csv文件并按原样保留当前页面的端点。
控制器具有void返回参数
RequestMapping(value = "/DownloadEndpoint")
public void csvDownload(HttpServletRequest request, HttpServletResponse response, @ModelAttribute(MODEL_ATTR_NAME) FacetedSearchRequestBean searchRequestBean, @PathVariable(value = PERSON_ID) String personId) throws IOException {
并编辑ResponseHeader以获取csv
protected void setCsvResponseHeaders(HttpServletResponse response, final String cvsSearchType) {
response.setContentType("text/csv;charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=filename.csv");
}
当我尝试使用不同的控制器为自己的目的执行此操作时,如果不编辑响应标题,我会得到一个空白页
这是我在jsp中的按钮(几乎是副本)
<button type="button" onclick="javascript:window.location='${pageContext.request.contextPath}/FeedBack/Test'">Ok</button>
传递给此控制器
@RequestMapping(value = "/Test")
public void popUpTest(HttpServletRequest request, Model model) throws InterruptedException
{
System.out.println("Test");
}
这适用于将控制权发送到Test控制器但不是将当前页面留在浏览器中而是浏览器显示空白屏幕。
有没有办法编辑响应标头,不去任何地方或做任何事情,以便我可以执行我的应用程序代码,并将浏览器保留在调用页面上而不以任何方式刷新它?
答案 0 :(得分:0)
你的问题在于
javascript:window.location
因为这会将浏览器的位置更改为其他页面。你可以改为进行ajax调用。
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var response = JSON.parse(xmlhttp.responseText);
//do something
}
}
xmlhttp.open("GET", "your url here", true);
xmlhttp.send();
如果使用jQuery,则更容易。
$.ajax({
type: "GET",
url: "url",
success: function( response ){
//do something
}
});