Javascript 使用Ajax发布和获取相同的PHP文件(JSON)

Javascript 使用Ajax发布和获取相同的PHP文件(JSON),javascript,php,jquery,json,ajax,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);

我试图通过两个步骤获得一个结果:

  • 第一步,我想从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>';
?>
我的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); ?>
它在
但当PHP文件返回一个错误`

'未定义索引:id_spece'`

  • 第二步,我想将同一个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);
        }
    });
    });
    

为了确保第二步工作正常,我用默认值替换了
$\u POST(['id_spece'])
,PHP文件返回的JSON格式不是空的,因此我认为问题出在第一步,我不知道问题到底出在哪里

为了在
$\u POST
数组中获取表单元素,它必须具有
name
属性。将
选择
元素更改为具有名称:

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

编辑后的:看起来您正在向PHP发送JSON格式,因此它无法在$\u POST上解析它,您需要获得完整的正文

试试这个:

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

这里有一个输入错误:-
$user\u id=isset($\u POST[“is\u specpe”])?$\u POST[“id\u specpe”]:“”
这里应该是
$\u POST[“id_spece”]
而不是
$\u POST[“is_spece”]
get参数不能被$\u POST use$\u请求访问,而不是给你的
select
一个name属性,
name=“id_spece”
@JayBlanchard他正在使用ajax发送数据,结果是:-
{id_spece:$('select.pam').val(),
所以post变量将是
$\u post['id_specpe']
不是
是_specpe
@AlivetoDie我正在使用id specpe不是specpe我只是编辑我的post做或不做,没有“尝试”。一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。
<select class="pam" name="id_espece">
$.post ('/charta.php',
    {id_espece:$('select.pam').val()},
    function(data){  
          console.log(data);
          window.location = "http://localhost/charta.php";
    });
$data = json_decode(file_get_contents('php://input'), true);
print_r($data);