我正在尝试为我的客户端项目制作一个简单的示例预览器。
样本列表存储在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文件形式。
答案 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);
});