结合上下文:
有一个远程目录clearing-dit\logs
,其中有一系列日志(portal.log
、test.log
、...
)。此目录映射到 HTML 页面,其中显示所有 .log's
。一旦点击其中一个,就会显示其各自的内容。
目前,我使用 thymeleaf 来显示内容:
<html xmlns:th="http://www.thymeleaf.org" th:include="layout :: page">
...
<div ...>
<p th: utext = "$ {log.content}"> Log content </ p>
</div>
问题是此内容以静态方式显示,我需要在文件更新时继续显示它。我去搜索了一下,发现我可以/需要通过 AJAX 来做到这一点,但 AJAX 的概念对我来说相当模糊。
目前,我正在尝试以一种非常简单的方式做到这一点:
$.ajax({
url : "/log",
type : "post",
success : function(data) {
document.getElementById('content').innerHTML = data;
}
});
以及(设置日志内容):
@RequestMapping(value = "/log", method = RequestMethod.POST)
public String logContent(@Valid Log log, BindingResult bindingResult, Map<String, Object> model) {
if (log.getInitLine() == 0 && log.getFinalLine() == 0) {
try {
fileNumberLines(log);
log.setContent(getLogContentByRange(0, log.getInitLine(), log.getFinalLine(), logsDir + "/" + log.getFilename()));
} catch (IOException e) {
logger.error(e.getMessage());
}
} else {
log.setContent(getLogContentByRange(0, log.getInitLine(), log.getFinalLine(), logsDir + "/" + log.getFilename()));
}
model.put("path", logsDir);
model.put("log", log);
model.put("currentPage", "logs");
model.put("root", root);
return "log";
}
但是我获取的是页面本身,而不是文件的内容。
这很有意义,因为我传递的是页面本身的 url。所以,我的问题是:如何通过 URL 访问日志内容?正确的网址是什么?
最佳答案
如果您将 View 用于 AJAX,则不应从 Controller 方法返回 View 的名称。您需要从该方法返回数据(对象)。您需要将数据转换为 JSON(可以在 Javascript 中使用),因此需要使用 @ResponseBody
标记该方法。您还需要jackson-databind
在类路径 (com.fasterxml.jackson.core jackson-databind
) 上进行 JSON 转换。
@RequestMapping(value = "/log", method = RequestMethod.POST)
@ResponseBody
public String logContent(@Valid Log log, BindingResult bindingResult, Map<String, Object> model) {
if (log.getInitLine() == 0 && log.getFinalLine() == 0) {
try {
fileNumberLines(log);
log.setContent(getLogContentByRange(0, log.getInitLine(), log.getFinalLine(), logsDir + "/" + log.getFilename()));
} catch (IOException e) {
logger.error(e.getMessage());
}
} else {
log.setContent(getLogContentByRange(0, log.getInitLine(), log.getFinalLine(), logsDir + "/" + log.getFilename()));
}
model.put("path", logsDir);
model.put("log", log);
model.put("currentPage", "logs");
model.put("root", root);
return log;//return an Object containing data (or your own Value Object)
}
关于javascript - 通过 AJAX 访问文件的正确 url 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51747538/