使用Ajax在相同的PHP文件(JSON)中POST和GET

时间:2017-07-13 18:00:18

标签: javascript php jquery json ajax

我试图通过两个步骤来达到结果:

  • 第一步我想从HTML(下拉列表)中删除PHP文件中的值:

这就是我的尝试:

<select class="pam" >
<option value=""></option>
<?php
$conn_string = "host=localhost port=5432 dbname=pame user=postgres password=";
$conn = pg_connect($conn_string); 
 $sql = pg_query($conn, "SELECT * FROM espece order by nom_com  ASC ");

while($ligne_liste=pg_fetch_array($sql)) {
    echo '<option value="'.$ligne_liste['id_espece'].'">'.$ligne_liste['nom_com']."</option>\n";
}
echo '</select>';
?>

我使用的JS代码:

jQuery(document).ready(function($) { 
      $('select.pam').change(function(){
         $.post ('/charta.php',
            {id_espece:$('select.pam').val()},
           success: function(){  
                  alert('success');
                  window.location = "http://localhost/charta.php";
            } 
            );
         });
    });

我的PHP文件:

<?php  

$user_id = isset($_POST["id_espece"])?$_POST["id_espece"]:"";
$user=conn ($user_id) // conn is a function who return an array from database
$js = json_decode( $user, true );
   ?>
  <?php 
   echo json_encode($js); ?>

这里的问题是我得到&#34; NULL&#34;对于$ _POST(&#39; id_espece&#39;)的值,即使从下拉列表中选择的值也是如此;但当我用:

替换成功函数时
function(res){ $('#txt').html(res); }

它在<div id="txt"></div>中返回我想要的结果(JSON输出) 但是当它返回错误“

时不在PHP文件中
  

&#39;未定义索引:id_espece&#39;`

  • 第二步我想获取同一个PHP文件的输出为HTML(div):

    如果我们认为PHP文件工作并发送了一个JSON表单,我试图在JS文件中获取结果,如下所示:

    $(document).ready(function(){
        $.ajax({
        url: "http://localhost/charta.php",
        method: "GET",
        success: function(data) {
            console.log(data);
            var region = [];
            var sup = [];
    
            for(var i in data) {
                region.push("region " + data[i].nom_reg_12);
                sup.push(data[i].aq);
            }
            var chartdata = {
                labels: region,
                datasets : [
                    {
                        label: 'Superficie(m²)',
                        backgroundColor: 'rgba(77, 214, 104, 0.75)',
                        borderColor: 'rgba(77, 214, 104, 0.75)',
                        hoverBackgroundColor: 'rgba(77, 214, 104, 1)',
                        hoverBorderColor: 'rgba(77, 214, 104, 1)',
                        data: sup
                    }
                ]
            };
    
            var ctx = $("#mycanvas");
    
            var barGraph = new Chart(ctx, {
                type: 'bar',
                data: chartdata
            });
        },
        error: function(data) {
            console.log(data);
        }
    });
    });
    

为了确保第二步正常工作,我用默认值替换$_POST(['id_espece'])并且PHP文件返回的JSON格式不是空的,所以我认为问题出在第一步,我不是&# 39;不知道问题究竟在哪里

2 个答案:

答案 0 :(得分:2)

为了在$_POST数组中获取表单元素,它必须具有name属性。将您的select元素更改为名称:

<select class="pam" name="id_espece">

此外,$.post没有您编写的success函数。格式应为:

$.post ('/charta.php',
    {id_espece:$('select.pam').val()},
    function(data){  
          console.log(data);
          window.location = "http://localhost/charta.php";
    });

答案 1 :(得分:0)

已编辑:从here开始,您似乎正在向PHP发送JSON格式,因此无法在$ _POST上解析它,您需要获得完整的正文

试试这个:

$data = json_decode(file_get_contents('php://input'), true);
print_r($data);