Php 解析JSON数组并提取select list ID和Value的值

Php 解析JSON数组并提取select list ID和Value的值,php,javascript,jquery,json,Php,Javascript,Jquery,Json,谢谢,我现在通过json传入数组,并根据您的示例将数据类型设置为json,如下所示: {“汽车品牌识别码”:“3”,“汽车发动机类型”:“非涡轮增压汽油机”}{“汽车品牌识别码”:“3”,“汽车发动机类型”:“非涡轮增压柴油机”} 但是我的脚本仍然拒绝附加select选项和值: $("select#make").change(function(){ $('#engine').find('option').remove().end(); //clear the engine ddl

谢谢,我现在通过json传入数组,并根据您的示例将数据类型设置为json,如下所示:

{“汽车品牌识别码”:“3”,“汽车发动机类型”:“非涡轮增压汽油机”}{“汽车品牌识别码”:“3”,“汽车发动机类型”:“非涡轮增压柴油机”}

但是我的脚本仍然拒绝附加select选项和值:

$("select#make").change(function(){
    $('#engine').find('option').remove().end(); //clear the engine ddl
    var make = $(this).find("option:selected").val(); //Need the value not the text - .Text()
    //alert(make);
    //do the ajax call
    $.ajax({
        url:'get-engine.php',
        type:'GET',
        data:{engine:make},
        dataType:'json',
        cache:false,
        success:function(data){                    
//var parsedjson = data=JSON.parse(data);  //no need if data:type json

$.each(data, function(index, item) {


    $("<option/>", {
        value: item.car_make_id,
        text: item.car_engine_type
    }).appendTo("#engine");
});


    }

});
});
$(“选择制作”).change(函数(){
$(“#引擎”).find('option').remove().end();//清除引擎ddl
var make=$(this).find(“选项:已选”).val();//需要值,而不是文本-.text()
//警惕(制造);
//执行ajax调用
$.ajax({
url:'get-engine.php',
类型:'GET',
数据:{engine:make},
数据类型:'json',
cache:false,
成功:函数(数据){
//var parsedjson=data=JSON.parse(data);//如果数据:类型为JSON,则不需要
$。每个(数据、功能(索引、项目){
$("", {
值:item.car\u make\u id,
文本:item.car\u engine\u type
}).附于(“引擎”);
});
}
});
});

似乎找不到它为什么不解析数组?

我不完全理解您的问题,特别是关于“因此需要ID值为“1”并列出选项作为名称”的部分。但是下面将使用
选项
元素填充
选择
元素,这些元素接受
解析的子元素中每个属性的值(
v
)作为值,每个属性的名称(
i
)作为用户可见的值:

$.each(parsedjson, function(i, v){
    $('select#engine').append('<option value="' + v + '">' + i + '</option>');
});
$。每个(parsedjson,函数(i,v){
$('select#engine')。追加(''+i+'');
});

JSON结构非常糟糕,所以真正的问题是将JSON修复为逻辑结构 以下是您可以使用当前版本尝试的内容:

$.ajax({
    url: 'grabdata.php',
    type: 'GET',
    data: {
        type: make
    },
    dataType: "json",
    cache: false,
    success: function (data) {

        $.each(data, function (index, item) {

            for( var key in item ) {}

            $("<option/>", {
                value: key,
                text: item[key]
            }).appendTo("#engine");
        });
    },
    error: function (jxhr) {
        alert(jxhr.responseText);
    }
});
$.ajax({
url:'grabdata.php',
键入:“GET”,
数据:{
类型:make
},
数据类型:“json”,
cache:false,
成功:功能(数据){
$。每个(数据、功能(索引、项目){
对于(项目中的var键){}
$("", {
值:键,
文本:项目[关键]
}).附于(“引擎”);
});
},
错误:函数(jxhr){
警报(jxhr.responseText);
}
});

JSFIDLE:

您好,对不起-我将详细说明我的示例。我的数组将包含两行,即发动机类型和发动机制造商ID。我需要解析数组,以发动机制造商ID作为选择ID,发动机类型作为选项值。因此,如果我的数组为{“1”:“1”,“涡轮柴油机”:“涡轮柴油机”,“涡轮增压汽油机”:“涡轮增压汽油机”、“非涡轮增压汽油机”:“非涡轮增压汽油机”}我需要ID“1”作为值,选项作为发动机类型。我仍然不明白。是否应将1附加到“选择#发动机”选择器,如
$('select#engine1')
?嗨,如果通过json发送的数组是:{“4”:“涡轮增压柴油机”}{“4”:“涡轮增压汽油机”}{“4”:涡轮增压柴油机最大功率“}{“4”:“涡轮增压汽油机最大功率”}我需要选择引擎将其值和选项设置为Turbo Diesel等。对整个阵列进行迭代。完美-非常感谢,感谢您坚持与我一起找出问题的根源。像您这样的成员使这个社区如此有价值,特别是对像我这样的新开发人员。@Marc,只要修复JS就行了在上。由于需要({}
for(var key in item)的结构,{}
看起来很难看。谢谢,我已经用我希望的最后一个问题更新了我的问题!似乎不会解析我的数组并附加到select#engine?@Marc,只需执行
console.log(data)
并查看从服务器返回的内容。另外,您确定只有一个id引擎元素吗?不能有多个id相同的元素,这就是为什么
select#engine
没有任何意义。@Marc,您确定它不是数组。如:
'[{“car_make_id”:“4”,“car_engine_type”:“Turbo Diesel”},{汽车制造商id:“4”,“汽车发动机类型:“涡轮增压汽油机”}],
因为只有一个数组才能工作。。。