【问题标题】:Creating an array of clients创建客户端数组
【发布时间】:2012-05-17 16:04:27
【问题描述】:

对于我的选择框切换,我需要为选择选项值预先构建一个 javascript 数组,方法是使用 php 在加载时生成一个 js 数组。到目前为止,我通过创建一个对象并将其添加到一个数组中来做到这一点,但现在我需要一个对象的属性是一个年份数组。我很接近(如果我 document.write 对象的 clientForm 属性将返回一个 csv 列表),但我不认为它是一个数组,因为我无法访问 length 属性并且之前的 document.write 不输出大批。谁能发现我做错了什么或建议一种替代方法?

这是输出 Javascript 数组的 php(我在 CodeIgniter 中构建了系统):

echo '<script type="text/javascript">';
            $array = 'var companies = new Array();';
$i = 0;foreach($clientList as $client) :
                $array .= 'arrayItem'.$i.' = {clientNo:"'.$client->client_id.'", clientCompany:"'.$client->client_company_name.'", clientRef:"'.$client->client_ref_no.'", clientForms: Array(';
                if($client->client_forms != "")
                {

                    $a = 0; foreach($client->client_forms as $form) :
                        $array .= $form.", ";
                    ++$a; endforeach;

                }
                $array = substr($array, 0, -2); 
                $array .= ')};';
                $array .= 'companies['.$i.'] = arrayItem'.$i.'; ';
++$i; endforeach;
            echo $array;
            echo '</script>';

这是当前的输出:

<script type="text/javascript">
    var companies = new Array();
    arrayItem0 = {clientNo:"1", clientCompany:"Test1", clientRef:"UG123HS", clientForms: Array(1, 15)};
    companies[0] = arrayItem0;

    arrayItem1 = {clientNo:"2", clientCompany:"Test2", clientRef:"UF321HS", clientForms: Array(17)};
    companies[1] = arrayItem1;
</script>

如果你想看看,这里是jsfiddle 上的完整输出代码(jsfiddle 似乎无法让我的 onclicks 工作,但它们在实际网页上可以)。

谢谢!

【问题讨论】:

  • 创建常用的 PHP 数组,然后对其进行 json_encode。我认为这会容易得多。
  • json_encodeing 在我看来是最好的解决方案......得到了它

标签: php javascript arrays codeigniter multidimensional-array


【解决方案1】:

要创建数组,最好使用以下语法:clientForms: [1,15]

要不然别忘了加new:clientForms: new Array(1,15)

【讨论】:

    【解决方案2】:

    您的代码看起来并不太遥远,因为 jsFiddle 运行得不太好,所以很难说。不过我确实注意到了一件事。

    你有list.options[i+1]=new Option(companies[i].clientCompany, companies[i].clientRef, false, false); //Add the first option in,你应该有list.options[cnt+1]=new Option(companies[i].clientCompany, companies[i].clientRef, false, false); //Add the first option in

    请注意,我将第一个 i 更改为 cnti 是遍历数组的计数器,cnt 实际上是您的选项计数器。如果您的实际页面没有为每个数组项生成结果,那么您很可能会留下空白选项。

    编辑:

    这是在函数 replaceCompanySelect 中。

    【讨论】:

      【解决方案3】:

      感谢@mashington 和@ParthThakkar 的回答,我不知道PHP 中的json_encode() 和javascript 中的JSON.parse() 是如何协同工作的。这是我的新 php 代码:

      echo '<script type="text/javascript">';
          echo "var companies = JSON.parse('".json_encode($clientList)."');";
      echo '</script>';
      

      【讨论】:

        猜你喜欢
        • 2013-01-17
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        • 1970-01-01
        • 2019-02-28
        • 2014-12-12
        • 2011-05-04
        相关资源
        最近更新 更多