在Javascript上调用PHP函数Onchange

时间:2017-05-22 14:55:29

标签: javascript php jquery html

我想在html的onchange中调用php select中的函数,怎么办呢?

html代码

<div class="col-sm-4 form-group">
   <label for="c_city">City</label>
   <select class="form-control" id="c_city" onchange="<?php getArea(); ?>">
        <option value="">Select City Name</option>
        <!--populate value using php-->
        <?php
            $stmt ="SELECT * FROM Cities";
            foreach ($con->query($stmt) as $row) {
         ?>
         <option value="<?php echo $row['City_ID'];?>"><?php echo $row['City_Name'];?></option>
         <?php
          }
         ?>
   </select>
</div>

PHP函数页

function getArea() 
{
    if(isset($_GET['c_city'])) 
    {
        $c_city = $_GET['c_city'];
        echo $c_city;
    }
}

2 个答案:

答案 0 :(得分:0)

这不能通过这种方式完成,你需要AJAX。你的想法无法工作,因为onchange是javascript的保留函数,而不是php。如果执行代码,当select更改时,只会将getArea()echo运行到javascript中,导致无法按预期查看。我在这里做的是将一个带有ajax调用的js函数放到你的php代码中,帮助你按照自己的意愿检索你的区域。显然我喜欢下面的评论,这不是将绑定放入html代码的好方法,因为当代码开始增长时,维护变得非常昂贵 - 为了解决这个问题,我使用on jquery function将一些监听器绑定到一个对象,但您也可以使用change

但重要的是要分析你是否真的需要javascript。如果您只在代码建议中获取一个值,则提交的表单更简单。

<div class="col-sm-4 form-group">
   <label for="c_city">City</label>
   <select class="form-control" id="c_city" onchange="getArea()"> //onchange is not a good practice in the html
        <option value="">Select City Name</option>
        <!--populate value using php-->
        <?php
            $stmt ="SELECT * FROM Cities";
            foreach ($con->query($stmt) as $row) {
         ?>
         <option value="<?php echo $row['City_ID'];?>"><?php echo $row['City_Name'];?></option>
         <?php
          }
         ?>
   </select>
</div>

<script>
   //that way with onchange in HTML
   function getArea(){
   var city = $('#c_city option:selected').val();
   $.get( "yourphpcode.php?action=getArea&c_city=" + city, function( data ) {

  alert( data );
});
   }
  //or THAT WAY
  $('#c_city').on('change', function(){
         var city = $(this).find('option:selected').val();
   $.get( "yourphpcode.php?action=getArea&c_city=" + city, function( data ) {

  alert( data );
});

   });
</script>


   //yourphpcode.php
    function getArea() 
{
    if(isset($_GET['c_city'])) 
    {
        $c_city = $_GET['c_city'];
        echo json_encode($c_city);
    }
}
    if (isset($_GET['action']) && $_GET['action'] == 'getArea'){
           getArea();
    }

答案 1 :(得分:0)

您可以尝试使用ajax来调用php脚本并将结果返回给javascript。

例如在你的html页面中:

<div class="col-sm-4 form-group">
   <label for="c_city">City</label>
   <select class="form-control" id="c_city" onchange="getArea()">
        <option value="">Select City Name</option>
        <!--populate value using php-->
        <?php
            $stmt ="SELECT * FROM Cities";
            foreach ($con->query($stmt) as $row) {
         ?>
         <option value="<?php echo $row['City_ID'];?>"><?php echo $row['City_Name'];?></option>
         <?php
          }
         ?>
   </select>
</div>

<script>
 function getArea(){
  var c_city = $('#c_city').val();
   $.ajax({
           type: 'POST',
           url: "get_area.php",
           data: {c_city:c_city},
           success: function(result){
               //do something here with return value like alert
               alert(result)
           }
     })
}
</script>

然后在您的PHP脚本中,您可以操纵从javascript

收到的值
if(isset($_POST['c_city'])) 
    {
        $c_city = $_POST['c_city'];
        echo $c_city;
    }

让我知道它是否有帮助,或者如果您发现问题