【问题标题】:Using php array in javascript to populate a 'select' ajax在 javascript 中使用 php 数组填充“选择”ajax
【发布时间】:2017-10-18 19:54:16
【问题描述】:

我有一个存储和状态的多维数组,它使 json 如下:

<?php 
$list[$store][$state] = $city;

echo json_encode ($list);
{"store 1": {"state x": "city 1", "state y": "city 2"}, "store 2": {"state z": "city 3"}}
?>

我需要使用相关数组的数据创建一个选择,根据选择的内容更改第二个选择。 像这样http://www.daviferreira.com/blog/exemplos/cidades/index.php

如何在 php for javascript 中处理这些数据? 以及如何将它们分开以在每个选择中使用它们?

我已经试过了:

var list = JSON.parse ("<? php echo json_encode($list)?>");

但它没有工作:(

EDIT选择的结构应该如下所示。

{"store 1": {"state x": "city 1", "state y": "city 2"}, "store 2": {"state z": "city 3"}}

First select
Store 1
Store 2

if store 1 selected
Second select
State x
State y

if store 2 selected
Second select
State z

类似的东西

【问题讨论】:

  • 你不需要JSON.parse。写var list = &lt;?php echo json_encode($list); ?&gt;;
  • 您希望list 动态更改吗? PHP 在第一次创建页面时在服务器上运行,而不是在客户端上运行。如果要动态更新,需要使用 AJAX 来获取新列表。
  • 他需要JSON.parse 才能将字符串转换为数组
  • @x3ns 不,因为json_encode() 的输出是一个Javascript 文字。
  • 啊,你是对的,我的错

标签: javascript php arrays json ajax


【解决方案1】:

您可以使用 jQuery 简单地做到这一点:

$(document).ready(function(){
    var list = <?= json_encode($list); ?>;
    var storeSelect = $("<select></select>");   
    storeSelect.attr('id', 'storeSelect');
    for(var item in list)
    {
        storeSelect.append('<option value="' + item + '">' + item + '</option>');
    }
    $('#theForm').append(storeSelect);


    var storeStates = $("<select></select>");
    storeStates.attr('id', 'storeState');       
    $('#theForm').append(storeStates);  

    $('#storeSelect').change(function ()
    {
        var storeName = $(this).val();
        for(var item in list[storeName])
        {   
            storeStates.html('<option value="' + item + '">' + item + '</option>');
        }   
    });
    $('#storeSelect').change();
});

它只是使用循环来创建选择菜单。并使用onChange 事件来操作这些值。

【讨论】:

    【解决方案2】:

    以下是使用 jQuery 的方法。如果您使用的是纯 JS,那么将其转换为读者的练习。

    var list = <?php echo json_encode($list); ?>;
    $.each(list, function(store) {
        $("#store_menu").append($("<option>", {
            value: store,
            text: store
        }));
    });
    
    $("#store_menu").change(function() {
        var store = $(this).val();
        $("#state_menu").empty();
        $.each(list[store], function(state) {
            $("#state_menu").append($("<option>", {
                value: state,
                text: state
            }));
        });
    });
    

    【讨论】:

    • $("#state_menu").append($("&lt;option&gt;", { 的语法无效,应该是 $("&lt;option&gt;")。括号未闭合。
    • @mega6382 谢谢,已修复。括号在具有属性的对象之后关闭。
    猜你喜欢
    • 2014-05-24
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2012-04-17
    • 2011-07-12
    • 1970-01-01
    相关资源
    最近更新 更多