Php 解析JSON数组并提取select list ID和Value的值
谢谢,我现在通过json传入数组,并根据您的示例将数据类型设置为json,如下所示: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
{“汽车品牌识别码”:“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”,“汽车发动机类型:“涡轮增压汽油机”}],
因为只有一个数组才能工作。。。