尝试加载本地JSON文件以使用JQuery在html页面中显示数据

Ven*_*hna 38 html javascript jquery json

嗨,我试图使用JQuery加载本地JSON文件来显示数据,但我得到一些奇怪的错误.我可以知道如何解决这个问题.

<html>
 <head>
<script type="text/javascript" language="javascript" src="jquery-1.8.2.min.js"></script>        

<script type="text/javascript">
    $(document).ready(function(e) {
    $.getJSON( "priorities.json" , function( result ){
        alert(result.start.count);
    });
});
</script></head>
</html>
Run Code Online (Sandbox Code Playgroud)

我只是提醒JSON数据的数量.我的JSON文件位于此html文件所在的目录中,JSON字符串格式如下所示.

{
"start": {
    "count": "5",
    "title": "start",
    "priorities": [
        {
            "txt": "Work"
        },
        {
            "txt": "Time Sense"
        },
        {
            "txt": "Dicipline"
        },
        {
            "txt": "Confidence"
        },
        {
            "txt": "CrossFunctional"
        }
    ]
}
}
Run Code Online (Sandbox Code Playgroud)

JSON文件名的priority.json和错误是

未定义未捕获的Referenceerror优先级

Kha*_* TO 34

由于安全问题(相同的原始策略),如果没有用户交互,则对本地文件的javascript访问受到限制.

根据https://developer.mozilla.org/en-US/docs/Same-origin_policy_for_file:_URIs:

仅当原始文件的父目录是目标文件的祖先目录时,文件才能读取另一个文件.

想象一下,当一个网站的javascript试图在你的系统中的任何地方窃取你的文件而你不知道的情况.您必须将其部署到Web服务器.或者尝试使用脚本标记加载它.像这样:

<script type="text/javascript" language="javascript" src="jquery-1.8.2.min.js"></script>        
<script type="text/javascript" language="javascript" src="priorities.json"></script> 

<script type="text/javascript">
   $(document).ready(function(e) {
         alert(jsonObject.start.count);
   });
</script>
Run Code Online (Sandbox Code Playgroud)

您的priority.json文件:

var jsonObject = {
"start": {
    "count": "5",
    "title": "start",
    "priorities": [
        {
            "txt": "Work"
        },
        {
            "txt": "Time Sense"
        },
        {
            "txt": "Dicipline"
        },
        {
            "txt": "Confidence"
        },
        {
            "txt": "CrossFunctional"
        }
    ]
}
}
Run Code Online (Sandbox Code Playgroud)

或者在页面上声明一个回调函数并像jsonp技术一样包装它:

<script type="text/javascript" language="javascript" src="jquery-1.8.2.min.js">    </script> 
     <script type="text/javascript">
           $(document).ready(function(e) {

           });

           function jsonCallback(jsonObject){
               alert(jsonObject.start.count);
           }
        </script>

 <script type="text/javascript" language="javascript" src="priorities.json"></script> 
Run Code Online (Sandbox Code Playgroud)

您的priority.json文件:

jsonCallback({
    "start": {
        "count": "5",
        "title": "start",
        "priorities": [
            {
                "txt": "Work"
            },
            {
                "txt": "Time Sense"
            },
            {
                "txt": "Dicipline"
            },
            {
                "txt": "Confidence"
            },
            {
                "txt": "CrossFunctional"
            }
        ]
    }
    })
Run Code Online (Sandbox Code Playgroud)

使用脚本标记与JSONP类似,但是使用这种方法并不是那么灵活.我建议将其部署在Web服务器上.

通过用户交互,允许javascript访问文件.就是File API的情况.使用文件api,javascript可以访问用户<input type="file"/>桌面选择的文件或从桌面删除到浏览器.

  • 在这个"解决方案"中,"priorities.json"不再是JSON文件,而是一个JavaScript文件. (6认同)

sen*_*tor 25

您只需在HTML中包含一个Javascript文件,即将JSON对象声明为变量.然后,您可以使用data.employees例如全局Javascript范围访问JSON数据.

index.html的:

<html>
<head>
</head>
<body>
  <script src="data.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

data.js:

var data = {
  "start": {
    "count": "5",
    "title": "start",
    "priorities": [{
      "txt": "Work"
    }, {
      "txt": "Time Sense"
    }, {
      "txt": "Dicipline"
    }, {
      "txt": "Confidence"
    }, {
      "txt": "CrossFunctional"
    }]
  }
}
Run Code Online (Sandbox Code Playgroud)


heq*_*equ 22

正如jQuery API所说:"使用GET HTTP请求从服务器加载JSON编码的数据."

http://api.jquery.com/jQuery.getJSON/

因此,您无法加载具有该功能的本地文件.但是当你浏览网页时,你会发现在javascript中加载文件系统中的文件非常困难,如下面的主题所示:

使用javascript进行本地文件访问

  • 有趣的故事:IE8也有用...... o_o (3认同)