Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JSON和PHP创建表单。根据select的值进行过滤_Javascript_Php_Jquery_Json_Ajax - Fatal编程技术网

Javascript 使用JSON和PHP创建表单。根据select的值进行过滤

Javascript 使用JSON和PHP创建表单。根据select的值进行过滤,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我有一个表单问题,我需要用PHP获取JSON的数据(因为它是一个api,我必须隐藏请求url) 我有三个选择: <select name="state" id="state"> <option value="" select>STATE</option> </select> <select name="city" id="city"> &l

我有一个表单问题,我需要用PHP获取JSON的数据(因为它是一个api,我必须隐藏请求url)

我有三个选择:

        <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>
我需要的是:

1-选择#状态:显示所有状态(不重复)

2-选择#城市:根据上述所选状态显示所有城市

3-选择#公司:根据上面选择的城市显示所有公司

我该怎么办? 我想我应该使用ajax请求嵌入json的php文件,但是我不知道怎么做

重要提示:我无法更改JSON的结构,因为它是一个api,我无法对其进行修改

有没有善良的灵魂来帮我


谢谢。

这应该让您开始:

<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>

如果要进行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

});
var响应数据;
$.ajax({
url:“your_php_page_url.php”//它甚至可以是像google这样的第三方api url
成功:职能(e){
//您将在这里获得json数据
resp_data=e;
//现在遍历数据以填充状态下拉列表
var状态=e公司;
var d=[];
$。每个(b,函数(a,c){
if($.inArray(c.state,d))=-1){
$('#state')。附加(''+c.state+'')
d、 推(c.state);
}
});
},//希望您没有发布任何数据,因此我跳过该部分
});
这就结束了你们州的人口。现在,根据状态下拉列表更改,您必须填充数据。如果您的响应相同,则无需再次调用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);
     }

   });
});
$('#state')。在('change',function()上{
var state=$(“#state option:selected”).val();//提供所选状态的值。
var op_数据=相应的公司数据;
var d=[];
$。每个(op_数据,函数(a,c){
if($.inArray(c.city,d))=-1&&c.state==state){
$(“#城市”)。附加(“”+c.city+“”)
d、 推动(c.city);
}
});
});
你的公司也是如此。你可以自己为公司试一试,就像那样!!!如果你有什么事,请告诉我

此代码可以进行更多优化。只是我觉得我应该写得详细些


干杯

请把你的问题翻译成英语,你也可以在这里问同样的问题。但是为了学习,你应该试试英语。对不起,我没有注意到我不在葡萄牙语区。。我已经翻译了这篇文章。
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

});
$('#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);
     }

   });
});