2017-04-15 43 views
0

我得到了一个包含JSON数组和外部函数的外部JS文件,可以帮助我选择一组随机变量。当我试图在主HTML文件中生成结果时,p标记中没有显示任何结果。我是否与任何对象或变量不匹配?如何从外部js文件中的JSON数组获取变量?

在主体部分HTML文件

<p id="result"></p> 
<script src="myJSfile.js" type="text/javascript"> 
<script language="javascript" type="text/javascript"> 
document.getElementById("result").innerHTML = lottery(selected.name + selected.age); 
</script> 

简短的例子外部的JS文件的简短的例子

function lottery() { 
var from, to, selected=new Array(); 
var person= 
    [ 
    {"name":"Georgia","age":"45"}, 
    {"name":"John","age":"38"}, 
    {"name":"Michael","age":"29"}, 
    ]; 
    if (arguments[0] == "all") { 
     from=0; 
     to=person.length; 
    } 
    else { 
     from=Math.floor(Math.random()*3); 
     to=Math.floor(Math.random()*3+1); 
    } 
    for (i=0; i<to; i++) { 
     selected[i]=person[from]; 
     from=(from+1)%3; 
    } 
    return selected; 
    } 

回答

2

fromtoselected变量不是函数外部可见的只是把此行var from, to, selected=new Array();脱离功能,它应该工作。

所有

var from, to, selected = new Array(); 
 
lottery('all'); 
 
for(var k = 0; k < selected.length; k++){ 
 
    document.getElementById("result").innerHTML += selected[k].name + " " + selected[k].age+'<br />'; 
 
} 
 

 
function lottery() { 
 
var person = 
 
    [ 
 
    {"name":"Georgia","age":"45"}, 
 
    {"name":"John","age":"38"}, 
 
    {"name":"Michael","age":"29"}, 
 
    ]; 
 
    
 
    if (arguments[0] == "all") { 
 
     from = 0; 
 
     to = person.length; 
 
    } 
 
    else { 
 
     from = Math.floor(Math.random()*3); 
 
     to = Math.floor(Math.random()*3+1); 
 
    } 
 
    
 
    for (i = 0; i < to; i++) { 
 
     selected[i] = person[from]; 
 
     from = (from+1)%3; 
 
    } 
 
    
 
    return selected; 
 
    
 
    }
<p id="result"></p>

随机

var from, to, selected = new Array(); 
 
lottery('all'); 
 
for(var k = 0; k < selected.length; k++){ 
 
    document.getElementById("result").innerHTML += selected[k].name + " " + selected[k].age+'<br />'; 
 
} 
 

 
function lottery() { 
 
var person = 
 
    [ 
 
    {"name":"Georgia","age":"45"}, 
 
    {"name":"John","age":"38"}, 
 
    {"name":"Michael","age":"29"}, 
 
    ]; 
 
    
 
    if (arguments[0] == "alla") { 
 
     from = 0; 
 
     to = person.length; 
 
    } 
 
    else { 
 
     from = Math.floor(Math.random()*3); 
 
     to = Math.floor(Math.random()*3+1); 
 
    } 
 
    
 
    for (i = 0; i < to; i++) { 
 
     selected[i] = person[from]; 
 
     from = (from+1)%3; 
 
    } 
 
    
 
    return selected; 
 
    
 
    }
<p id="result"></p>

+0

THX @Muhammad。我试过了。它似乎工作,但我仍然无法从JSON得到的价值。我作为[John 38]除外,但作为[object Object]返回。也许innerHTML部分仍然有问题。无论如何,几乎完成。 – JoeyU

+0

尝试获取像'selected [0] .name'这样的值 – Muhammad

+0

可悲的是它没有改变任何东西......我应该带走彩票的毯子吗? – JoeyU

0

我已经在你的鳕鱼做了一些修改E,请检查,这应该工作

<p id="result"></p> 
<script src="stackoverflow.js" type="text/javascript"> 
<script> 
(function() { 
    document.getElementById("result").innerHTML = lottery('all'); 
})(); 
</script> 

,并在外部JS

function lottery() { 
var from; 
var to; 
var selected=new Array(); 
var person= 
[ 
{"name":"Georgia","age":"45"}, 
{"name":"John","age":"38"}, 
{"name":"Michael","age":"29"}, 
]; 
if (arguments[0] == "all") { 
    from=0; 
    to=person.length; 
} 
else { 
    from=Math.floor(Math.random()*3); 
    to=Math.floor(Math.random()*3+1); 
} 
for (i=0; i<to; i++) { 
    selected[i]=person[from]; 
    from=(from+1)%3; 
} 
return selected; 
} 
+0

Thx @sanjay。它确实显示了一些东西,但不是从JSON中获取确切的值。 显示为[对象对象],[对象对象]不是[约翰38]那个东西。 我想我明白了方向。 – JoeyU

+0

@JoeyU它显示[对象对象],因为抽奖函数返回选定的对象,所以尝试从它得到值..像选中[0] .name。 如果这个答案解决了你的问题,那么请接受它 – Sanjay

+0

thx的提示。我认为这是原因。选中[0] .name虽然不工作。我检查了直接在HTML文件中插入相同的JSON集合,然后像person [0] .name这样的东西能正常工作...... *叹气* – JoeyU

相关问题