在常规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);
}
答案 0 :(得分:1)
我不确定,您如何假设该网址
http://localhost:8080/web/guest/data/myfile.json
将为您服务 调用myfile.json
作为回复。你在哪里构建那个URL 你觉得它如何运作?
嗯,另一种简单的方法是在portlet的data
下创建docroot
文件夹,然后将myfile.json
文件移到那里。
现在就在你的外部javascript文件(你已经共享了一些代码)的包含之上,添加以下行:
<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
的路径。
答案 1 :(得分:0)
在web.config
上试试<system.webServer>
<staticContent>
<mimeMap fileExtension=".json" mimeType="text/json" />
</staticContent>
</system.webServer>