遇到JSON和Javascript问题

时间:2015-05-10 17:07:26

标签: javascript jquery json

我正在尝试为我的客户端项目制作一个简单的示例预览器。 样本列表存储在JSON文件中。但问题是,我不太熟悉使用JSON或编程本身,说实话。 我编写了一个简短的测试代码来查看这个JSON文件是否运行良好,但是虽然我可以从firebug控制台访问--2015-05-10 10:05:11-- https://install.meteor.com/ Resolving install.meteor.com (install.meteor.com)... 54.243.218.35, 54.83.1.203, 107.21.116.12, ... Connecting to install.meteor.com (install.meteor.com)|54.243.218.35|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/plain] Saving to: ‘index.html.1’ [ <=> ] 6,121 --.-K/s in 0s 2015-05-10 10:05:13 (153 MB/s) - ‘index.html.1’ saved [6121] 变量,sampleData行似乎无法访问document.write(sampleData.length);某些原因。错误显示:

  

TypeError:sampleData未定义

我怀疑它与变量范围有关,但我不确定。

sampleData

如何使<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script> <script type="text/javascript"> var sampleData; $.getJSON('res/Samples.json',function(data){ sampleData=data; }); document.write(sampleData.length); </script> 变量与其余代码一起使用?
对不起,我不能透露json文件的内容。它包含一系列包含产品信息的对象。它看起来像

sampleData

据我所知,它是一种非常通用的JSON文件形式。

4 个答案:

答案 0 :(得分:4)

您的代码很好,但$.getJSON只是启动获取JSON文件的过程,然后允许您的代码继续,调用document.write$.getJSON的回叫在<{strong>> document.write之后被称为 。而是从 回调中触发您想要触发的任何后续代码。

在这种情况下,您无法有效使用document.write。但是,您可以使用DOM和jQuery的各种DOM包装函数。例如:

$.getJSON('res/Samples.json',function(data){
    $("<p>").html(data.length).appendTo(document.body);
});

答案 1 :(得分:2)

这是由于$.getJSON的异步响应。

var sampleData;
$.getJSON('res/Samples.json', function(data) {
  sampleData = data; // This is occurring after the document.write
});
document.write(sampleData.length);

这基本上与:

相同
var sampleData;
setTimeout(function() {
  sampleData = 'Some data'; // This is occurring after the document.write
}, 100);
document.write(sampleData.length);

可以document.write移动到响应处理程序,但如下所述它确实有drawbacks

var sampleData;
$.getJSON('res/Samples.json', function(data) {
  document.write(sampleData.length); // This would replace the page contents
});

答案 2 :(得分:1)

它是异步发生的,所以你需要在异步调用本身中调用document.write

var sampleData;
$.getJSON('res/Samples.json',function(data){
    sampleData = data;
    document.write(sampleData.length);
});

另外,如果您在生产代码中使用document.write来写入页面,我建议不要这样做。如果您在上面的示例中使用document.write仅用于调试目的(以确定它为什么不起作用),我建议您改用console.log。更容易。

答案 3 :(得分:1)

$.getJSON是异步功能,当您document.write(sampleData.length);时,sampleData尚未填充。

你必须这样做:

$.getJSON('res/Samples.json',function(data){
   sampleData=data;
   document.write(sampleData.length);
});