【问题标题】:Use Ajax to POST and GET in the same PHP file (JSON)使用 Ajax 在同一个 PHP 文件 (JSON) 中进行 POST 和 GET
【发布时间】:2017-12-18 16:03:49
【问题描述】:

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

  • 第一步我想从 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); ?>

这里的问题是 $_POST ('id_espece') 的值是“NULL”,即使是从下拉列表中选择的值;但是当我将成功功能替换为:

function(res){ $('#txt').html(res); }

它在&lt;div id="txt"&gt;&lt;/div&gt; 中返回我想要的结果(JSON 输出) 但不是在 PHP 文件中,当它返回一个错误时 `

'未定义索引:id_espece'`

  • 第二步我想将同一个PHP文件的输出GET到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格式不为空,所以我认为问题出在第一步,我不知道问题到底出在哪里

【问题讨论】:

  • 这里有一个错字:- $user_id = isset($_POST["is_espece"])?$_POST["id_espece"]:""; 这里应该是 $_POST["id_espece"] 而不是 $_POST["is_espece"]
  • $_POST 无法访问获取参数,请改用 $_REQUEST
  • 给你的select一个名字属性,name="id_espece"
  • @JayBlanchard 他正在使用 ajax 发送数据,它是:- {id_espece:$('select.pam').val()}, 所以后变量将是 $_POST['id_espece'] 而不是 is_espece
  • @AlivetoDie 我正在使用 id-espece 而不是 is-espece 我只是编辑我的帖子

标签: javascript php jquery json ajax


【解决方案1】:

已编辑:取自here,您似乎正在向 PHP 发送 JSON 格式,因此它无法在 $_POST 上对其进行解析,您需要获取完整的正文。

试试这个:

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

【讨论】:

  • 做或不做,没有“尝试”。 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
【解决方案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";
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多