【问题标题】:Load and Parse a JSON file in local system using jQuery使用 jQuery 在本地系统中加载和解析 JSON 文件
【发布时间】:2016-12-17 17:19:42
【问题描述】:

我是脚本语言的新手。我已经用 jQuery 搜索加载和解析 JSON 文件。我已经从 Stack Overflow 获得的那些链接帮助了我。

我有这个名为 new.json 的 JSON 文件。

 { "a": [
           {"name":"avc"},
           {"name":"Anna"},
           {"name":"Peter"},
           {"Folder": "ABC", "name":[
           {"name":"John"},
           {"name":"Anna"},
           {"Folder":"XYZ", "name":[ 

                     {"name":"fdgh"},
                     {"name":"hdfghh"},
                     {"Folder":"JKL", "name":[ 

                                {"name":"gdfgdfgggggg"},
                                {"name":"hddddddddddddddddddddddddddddh"},  
                                {"Folder":"PQR", "name":[ 

                                        {"name":"gddddddg"},
                                        {"name":"ddhh"}

                                       ]
                                  }
                             ]
                          }
                       ]
                    }
                 ]
              }
          ]
      }

这是我用来加载new.json 文件的jQuery/JavaScript 代码。我已经在<script> 标记内编写了我的代码。

     <script src="jquery-3.1.0.js"></script>
      <script type="text/javascript" language="javascript"     src="C:\Users\Girish\Desktop\new.json"></script>
       <script type="text/javascript">
       var out="<ul>"; 
       var j=0;

       function functionName(event) {
             $('li[id^="foo"]').click(function(e){ 
                        e.stopPropagation();
                        var x = $(this).last().find(' > ul').clone().find('ul').remove().end();
                        $('#list').html(x);
                        $("#list .hide").show();
             });
         }

    $(document).ready(function() {
        $('li[id^="foo"]').each(function() {
                $(this).on('click', {param: this.id}, functionName);
         }); 
    });

    function read(obj){

        for(var i = 0; i < obj.length; i++)
        {
            if(obj[i].Folder)
            {
               var name = "foo"+ ++j;
               var name2 = "<li id=" + name + ">";
               out = out+ name2 + obj[i].Folder + "<ul>";

               document.getElementById("tree").innerHTML = out;

               read(obj[i].name);
               out=out+"</ul></li></ul>";
            }
            else
            {
                 var name2 = "<li class=\"hide\">";
                 out = out+ name2 + obj[i].name;
                 document.getElementById("tree").innerHTML = out;
                 out=out+"</li>";
            }
          }
      }

     function show()
     {
       //read(a)
        var myItems;

        $.getJSON('new.json', function(data) {
        myItems = data.a;
        read(myItems)
     });

   }

 </script>

这是&lt;body&gt;标签。

  </div>
  <div id="list"></div>

当我在 Google Chrome 上运行此代码时。它给出了这个错误

jquery-3.1.0.js:9392 XMLHttpRequest 无法加载 file:///C:/Users/Girish/Desktop/new.json。仅协议方案支持跨源请求:http、data、chrome、chrome-extension、https、chrome-extension-resource。在控制台上。我用谷歌搜索了这个错误,我发现一些链接说在 Mozilla Firefox 上运行相同的文件。

我在 Mozilla Firefox 上运行的相同代码,它没有给出任何错误。它显示#tree div 中的项目。但是当我点击tree div 中的任何项目时。它没有在#list div 中显示其子元素。

现在我想在ChromeFirefox 上加载json 文件。如何解决上述错误?

为什么单击tree div 中的任何项目时,子项目没有显示在list div 中?

谢谢

【问题讨论】:

  • Stack Overflow 不是论坛,请为您的第二期发布一个单独的问题。

标签: javascript jquery html json


【解决方案1】:

这与 JQuery 无关。如果您在本地运行网页(URL 开头带有file:///),则根本无法访问本地文件。它违反了本地运行页面的安全模型。

您收到的错误与称为 CORS(跨源资源共享)的东西有关,并且是一种广泛使用的安全机制,仅允许同一域上的客户端浏览器应用程序访问资源或 API。受信任的 CORS 策略之外的任何内容都会被拒绝。在本地网页的情况下,文件被认为在您的来源之外;您的浏览器本质上认为您的硬盘驱动器位于不同的域中。否则,恶意脚本只需猜测访问路径即可轻松访问您的本地文件。

要解决此问题,您需要使用某种开发服务器(或成熟的 Web 服务器),以便您的页面可以在本地托管。然后你可以通过http://localhost/或你的本地IP地址访问你的页面,通常是http://127.0.0.1/

一些可以托管静态文件的开发服务器示例:

  • Fenix Web Server 看起来是静态托管的不错选择
  • 如果您安装了 Python,python -m SimpleHTTPServer 将在您启动它的任何文件夹中的 http://localhost:8000/ 上启动一个服务器
  • Mongoose 似乎有不错的基于 Web 的管理控制台

基本上任何搜索static web server(使用您的操作系统)都应该找到很多简单的选项。

【讨论】:

  • 我们可以通过一些代码来实现吗?我想要做的是,我会将这个 new.json 文件和我的名为 page.html 的 html 页面发送给许多用户。他们打开 page.html,然后打开 new.json。用户可以在任何浏览器上运行此文件。用户可能有也可能没有这些 chrome 设置。那么我们如何才能做到这一点。
  • 为什么子元素没有显示在 #list div 中?我的代码有问题吗?
  • 您为什么不在线托管此页面,以便相关人员可以通过网络访问它?网页并非旨在像本地应用一样运行。
猜你喜欢
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
相关资源
最近更新 更多