我正在尝试将一些数据发送回我的应用程序,而无需离开现有页面。我宁愿不重新加载当前页面。
该应用程序已经有一个下载选项,该选项按照我想要的方式工作...该按钮的工作方式如下
<button type="button" onclick="javascript:window.location='/DownloadEndpoint?params'">Download</button>
这将转到一个端点,该端点下载 csv 文件并按原样保留当前页面。
Controller 有一个空返回参数
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");
}
当我尝试使用不同的 Controller 出于自己的目的执行此操作时,而不编辑响应 header ,我会得到一个空白页面
这是我在 jsp 中的按钮(几乎是一个副本)
<button type="button" onclick="javascript:window.location='${pageContext.request.contextPath}/FeedBack/Test'">Ok</button>
传递到此 Controller
@RequestMapping(value = "/Test")
public void popUpTest(HttpServletRequest request, Model model) throws InterruptedException
{
System.out.println("Test");
}
这在控制发送到测试 Controller 的情况下有效,但浏览器不会将当前页面保留在浏览器中,而是显示空屏幕。
有没有办法编辑响应 header ,使其不去任何地方或执行任何操作,以便我可以执行我的应用程序代码并将浏览器保留在调用页面上而不以任何方式刷新它?
最佳答案
你的问题在于
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
}
});
关于javascript - 重定向到 spring mvc Controller 而不打开页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33957108/