404未找到JSON文件Liferay

时间:2016-03-14 09:43:16

标签: javascript json liferay

在常规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);  
}

2 个答案:

答案 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>