2013-07-01 52 views
2

我正在构建一个网站,它将(最终)成为游戏的前端。我希望能够动态构建用户能够购买的“权力”列表。为了构建这些列表,我使用基于PHP的SQL查询,然后将它传递给Javascript进行动态选择(某些权力具有先决条件权力)。关于eval的邪恶:如何清理

  1. 我知道有一个简单的方法做我在做什么,但我不是超级关注,现在右(我将在后面,但我试图让这个功能和然后干净)(再次,我知道这是非最佳的)。
  2. 我使用eval来解析显示哪些div,并且我想知道如何不去。
  3. 我有问题让我的div名建立在第一位。

这里是我的代码: 使用Javascript(单独的文件)

function upgradeList(passed) 
{ 
    var PowerArray = []; 
    var DetailPowerID = []; 
    var EscapedPowerID = []; 
    PowerArray.push([]); 
    PowerArray = eval(passed); 
    var OutputThing=""; 
    for (i=0;i<PowerArray.length;i++) 
    { 
     DetailPowerID[i] = 'detail' + PowerArray[i][0]; 
     EscapedPowerID[i] = "'" + DetailPowerID[i] + "'"; 
    } 
    for (i=0;i<PowerArray.length;i++) 
    { 
     OutputThing = OutputThing + "<br><a href='#' onClick='showUpgradeDetails(" + DetailPowerID[i] + ")'>" + PowerArray[i][2] + "</a><div class='hidden' id='" + 
     DetailPowerID[i] + "'>" + PowerArray[i][3] + "</div>"; } 
     document.getElementById("secondUpgrade").innerHTML=OutputThing; 
     document.getElementById("secondUpgrade").style.display='block'; 
    } 
} 

PHP编写HTML和JS: {$ AbleToUpgrade和$ UpgradeList是从SQL查询内置二维数组)

echo "<script name='UpgradeList'>"; 
settype($UpgradesListSize[$i],"int"); 
for ($i=0;$i<count($AbleToUpgrade);$i++) 
{ 
    echo "var UpgradeList" . $AbleToUpgrade[$i][0] . " = new Array();"; 
    for ($j=0;$j<=$UpgradesListSize[$i];$j++) 
    { 
     echo "UpgradeList" . $AbleToUpgrade[$i][0] . ".push(Array('" 
      . $UpgradeList[$i][$j][0] . "', '" 
      . $UpgradeList[$i][$j][1] . "', '" 
      . $UpgradeList[$i][$j][2] . "', '" 
      . $UpgradeList[$i][$j][3] . "', '" 
      . $UpgradeList[$i][$j][4] . "'));"; 
    } 
} 
echo "</script>"; 

...以后...

echo "<div id='SpendUpgrade'> 
    Select power to upgrade: 
    <ul>"; 
    for ($i=0;$i<count($AbleToUpgrade);$i++) 
    { 
     echo "<li><a href='#' name='UpgradeList" . $AbleToUpgrade[$i][0] . "' onClick='upgradeList(this.name)'>" . $AbleToUpgrade[$i][1] . " - " . $AbleToUpgrade[$i][2] . "</a></li>"; 
    } 
    echo "</select> 
    <div id='secondUpgrade' class='hidden'> 

    </div> 
    <div id='thirdUpgrade' class='hidden'> 

    </div> 
</div>"; 

当网页加载完毕后,我风与这样生成的文本:

<a href="#" onclick="showUpgradeDetails(detail21)">Real Armor</a> 

和相应的div:

<div class="hidden" id="detail21" style="display: none;">Your armor only works in the Waking</div> 

为了获得股利显示(display:block;),我需要调用像这样的功能:

showUpgradeDetails("detail21") 

,但我不能让JS/PHP写正确的报价。请帮忙(有任何或所有这些?)请!

+0

json_encode-JSON.parse,JSON.stringify-json_decode – dandavis

+1

将数据编码为JSON似乎是一种可行的解决方案。了解有关JSON的更多信息:http://en.wikipedia.org/wiki/Json。 –

+0

使用JSON.parse()返回各种令人讨厌的错误,我不知道解决它们。有了初学者的知识,它看起来像我的变量没有被格式化为JSON对象。 – Farfromunique

回答

0

我发现了一个决议,它不是JSON.parse()。 我将PowerArray = eval(passed);更改为PowerArray = window[passed];

因为passed包含一个变量的名称,而不是变量本身,我不能直接使用它。但是,因为它是一个只包含全局定义变量名称的字符串,所以我可以将它传递给window[]构造并使其工作。