代码之家  ›  专栏  ›  技术社区  ›  Paull

如何在javascript中同步包含JSON数据而不进行解析?

  •  29
  • Paull  · 技术社区  · 14 年前



    我希望在页面加载开始时以同步方式执行此操作,因为在页面加载期间需要数据。

    有没有一种方法可以以同步的方式加载JSON,而不需要自己进行解析?
    (或多或少类似于使用 <script language="JavaScript" src="MyArray.json"></script> )

    保罗

    7 回复  |  直到 14 年前
        1
  •  35
  •   Alex Wayne    14 年前

    getJSON() 只是 ajax() 使用 dataType:'json' 准备好了。这个 ajax() 函数将允许您对请求进行大量自定义。

    $.ajax({
      url: 'MyArray.json',
      async: false,
      dataType: 'json',
      success: function (response) {
        // do stuff with response.
      }
    });
    

    async:false 但它在ajax调用继续执行之前触发。

        2
  •  14
  •   BlouBlou Boris Hamanov    11 年前

    干得好:

    // Load JSON text from server hosted file and return JSON parsed object
    function loadJSON(filePath) {
      // Load json file;
      var json = loadTextFileAjaxSync(filePath, "application/json");
      // Parse json
      return JSON.parse(json);
    }   
    
    // Load text with Ajax synchronously: takes path to file and optional MIME type
    function loadTextFileAjaxSync(filePath, mimeType)
    {
      var xmlhttp=new XMLHttpRequest();
      xmlhttp.open("GET",filePath,false);
      if (mimeType != null) {
        if (xmlhttp.overrideMimeType) {
          xmlhttp.overrideMimeType(mimeType);
        }
      }
      xmlhttp.send();
      if (xmlhttp.status==200)
      {
        return xmlhttp.responseText;
      }
      else {
        // TODO Throw exception
        return null;
      }
    }
    

        3
  •  4
  •   zzzzBov    14 年前

    如果使用某种服务器脚本,可以将数据打印到页面上的脚本标记:

    <script type="text/javascript">
    var settings = <?php echo $json; ?>;
    </script>

    这将允许您同步使用数据,而不是尝试异步使用AJAX。

        4
  •  1
  •   user2091857    12 年前

    我只需要读取一个json格式的小输入文件并提取少量数据。在这种情况下,这种方法很有效:

    json文件与脚本位于同一目录中,名为data.json,如下所示:

    {"outlets":[
            {
                "name":"John Smith",
                "address":"some street, some town",
                "type":"restaurant"
            },
    ..etc...
    

    var data = <?php echo require_once('data.json'); ?>; 
    

    访问如下数据项:

    for (var i in data.outlets) {    
    var name = data.outlets[i].name;
    ... do some other stuff...
    }
    
        5
  •  0
  •   smets.kevin    12 年前

    如果RequireJS是一个选项,那么可以使用RequireJS使其成为依赖项。我用它来模拟角度应用程序中的数据。一些模拟数据必须在应用程序启动之前存在。

    //Inside file my/shirt.js:
    define({
        color: "black",
        size: "unisize"
    });
    

    只需将json数据包装在一个定义中并将其声明为依赖项。更多信息请点击此处: http://requirejs.org/docs/api.html#defsimple

        6
  •  -2
  •   james-geldart    9 年前

    $(document).ready(function() {
      $.get('/path/to/json/resource', function(response) {
        //'response' now contains your data
        //your app code goes here
        //...
      });
    });
    
        7
  •  -2
  •   user6371909    7 年前

    没有jQuery的现代HTML5方式是:

       var url="https://api.myjson.com/bins/1hk8lu" || "my.json"
       var ok=await fetch(url)
       var json=await ok.json()
       alert(a.test)
    
    推荐文章