我遇到了需要使用PHP获取JSON数据的表单问题(因为它是api,我必须隐藏请求URL)。
我有3个选择:
<select name="state" id="state">
<option value="" select>STATE</option>
</select>
<select name="city" id="city">
<option value="" select>CITY</option>
</select>
<select name="company" id="company">
<option value="" select>COMPANY</option>
</select>
Json向公司提供各自的数据:
"companies": [
{
"company": "name x",
"city": "sao paulo",
"state": "SP"
},
{
"company": "name y",
"city": "belo horizonte",
"state": "MG"
},
{
"company": "name z",
"city": "sao paulo",
"state": "SP"
} ]
我需要什么:
1 - 选择#state:显示所有状态(不重复)。
2 - 选择#city:根据上面选择的状态显示所有城市。
3 - 选择#company:根据上面选择的城市显示所有公司。
我该怎么办? 我想我应该使用ajax请求嵌入了json的php文件,但我不知道该怎么做。
重要提示:我无法更改JSON的结构,因为它是一个我无法访问修改的API。
有什么好心灵可以帮助我吗?
谢谢。
答案 0 :(得分:0)
这应该让你开始:
<html>
<body>
<select name="state" id="state">
<?php
$json = file_get_contents('test.js');
$data = json_decode($json, true);
foreach($data['companies'] as $entry) {
echo "<option value=".$entry['company']."select>".$entry['company']."</option>";
}
?>
</select>
</body>
</html>
上面的代码将接受json输入,将其解码为数组,然后我们可以遍历内部的元素。
变量$ json接受外部输入,但您可以修改它以满足您的需求。如果要测试上面的代码,请在同一目录中创建一个名为“test.js”的文件。
你提供的json似乎也有问题,你错过了一些大括号。这是正确的:
{
"companies": [{
"company": "name x",
"city": "sao paulo",
"state": "SP"
},
{
"company": "name y",
"city": "belo horizonte",
"state": "MG"
},
{
"company": "name z",
"city": "sao paulo",
"state": "SP"
}
]
}
答案 1 :(得分:0)
如果您想根据选择进行ajax调用并填充数据,这可能会有所帮助:
var resp_data;
$.ajax({
url:"your_php_page_url.php", //it can be even third party api url like google
success:function(e){
//you will get your json data here
resp_data = e;
//Now iterate through your data to fill state dropdown
var state = e.companies;
var d = [];
$.each(b, function(a,c){
if(($.inArray(c.state,d)) == -1){
$('#state').append('<option value="'+c.state+'">'+c.state+'</option>')
d.push(c.state);
}
});
}, //hope you are not posting any data, so I am skipping that part
});
这结束了你的州人口。现在,根据状态下拉列表更改,您将不得不填充数据。如果您的响应相同,则无需再进行另一个ajax调用,只需将响应保存在变量中并重复使用即可。对于城市,你可以这样做:
$('#state').on('change',function(){
var state = $('#state option:selected').val(); //gives you value of state selected.
var op_data = resp_data.companies;
var d = [];
$.each(op_data, function(a,c){
if(($.inArray(c.city,d)) == -1 && c.state == state){
$('#city').append('<option value="'+c.city+'">'+c.city+'</option>')
d.push(c.city);
}
});
});
贵公司也一样。你也可以尝试一下这样的公司!请告诉我你是否陷入困境。
此代码可以进行更多优化。只是我认为我应该以详细的方式写作。
干杯!!!