在常规 HTML 页面中一切顺利,但在 liferay portlet 中使用相同的代码时,我遇到了这个问题:
获取 http://localhost:8080/web/guest/data/myfile.json 404(未找到)index.js:103
这是代码:
function loadFiles(){
loadJSONNetworkInventory(function(response) {
parsedMyFile = JSON.parse(response);
});
}
function loadJSONNetworkInventory(callback) {
var xobjNI = new XMLHttpRequest();
xobjNI.overrideMimeType("application/json");
xobjNI.open('GET', 'data/myfile.json', false);
xobjNI.onreadystatechange = function () {
if (xobjNI.readyState == 4 && xobjNI.status == "200") {
callback(xobjNI.responseText);
}
};
xobjNI.send(null);
}
最佳答案
I am not sure, how do you assume that the URL
http://localhost:8080/web/guest/data/myfile.json
will serve youmyfile.json
as response when called. Where do you construct that URL and how do you suppose it to work?
嗯,另一种简单的方法是在 portlet 的 docroot
下创建 data
文件夹,然后移动 myfile.json
文件在那里。
现在,在您的外部 javascript 文件(您已共享其中的一些代码)的 include 上方,添加以下行:
<script type="text/javascript">
var portletContextPath = '<%=request.getContextPath() %>';
</script>
并在给定的脚本中进行以下更改:
function loadJSONNetworkInventory(callback) {
var xobjNI = new XMLHttpRequest();
xobjNI.overrideMimeType("application/json");
var jsonFilePath = portletContextPath + '/data/myfile.json';
xobjNI.open('GET', jsonFilePath, false);
xobjNI.onreadystatechange = function () {
if (xobjNI.readyState == 4 && xobjNI.status == "200") {
callback(xobjNI.responseText);
}
};
xobjNI.send(null);
}
就是这样! portletContextPath
将用作 JavaScript 变量来获取 Portlet 的动态上下文路径,而 jsonFilePath
将是 myfile.json
的路径。
关于javascript - 404 未找到 JSON 文件 Liferay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35984067/