使用JSON和PHP的表单。根据select的值过滤

时间:2018-05-17 05:53:33

标签: javascript php jquery json ajax

我遇到了需要使用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。

有什么好心灵可以帮助我吗?

谢谢。

2 个答案:

答案 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);
     }

   });
});

贵公司也一样。你也可以尝试一下这样的公司!请告诉我你是否陷入困境。

此代码可以进行更多优化。只是我认为我应该以详细的方式写作。

干杯!!!