无法使用PHP

时间:2018-03-28 11:06:47

标签: javascript php ajax post

我从mysql数据库中获取数据列表,我将其添加到选择列表中。当用户选择一个选项时,我想从所选项中获取ID,并使用它来引用我的结果数组的索引,如下所示:

echo $results[$id]['fruit'];

我使用$ results = $ stmt-> fetchAll(PDO :: FETCH_UNIQUE)从数据库中检索数据,因此选择列表的每个id都是记录的主键。

所以我读到我可以使用AJAX获取所选项的值并将其作为POST变量发送回来,然后我可以在PHP中访问它。但是,当我去打印这个变量时,我什么都没得到。

if(isset($_POST['id']))
{
    $id = $_POST['id']; 
    echo $id; //prints nothing
}

这是我的代码:

<html>
<head>
    <script
    src="https://code.jquery.com/jquery-3.3.1.min.js"
    integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
    crossorigin="anonymous">
    </script>
    <script>
        function listChange() {
            var recID = document.getElementById("fruits").value;
            $.ajax({
                method: 'POST',
                data: {'id' : recID},
                dataType: "json",
                success: function(response)
                {
                    console.log(response);
                }
            });
        }
    </script>   
</head>
<body>
    Fruits
    <select id="fruits" name="fruits" onchange="listChange()">
        <option value="0">Apple</option>
        <option value="1">Pear</option>
        <option value="2">Watermelon</option>
        <option value="3">Orange</option>
    </select>
    <br/><br/>
    My Fruit <input type="text" id="myfruit">
    <?php
    if(isset($_POST['id']))
    {
        $id = $_POST['id']; 
        echo $id;  //does not print however post is working if you look in firefox -> web developer -> developer toolbar -> network

        //the id will be used to reference a variable 
        //$results[$id]['fruit'] which I got 
        //from a database like this 
        //$results = $stmt->fetchAll(PDO::FETCH_UNIQUE);
        //this value will set the text field myfruit
    }
    ?>
</body>
</html>

6 个答案:

答案 0 :(得分:0)

我想你可以试试这个

$(document).ready(function(){  
    $("#fruits").change(function(){
     var fruitValue = $(this).val(); // for the value i.e 0,1,2,3
     var fruitTect = $(this).text(); // for text i.e. Apple, Pear,...
    // then now you can do ur ajax
     $.ajax({
       // Your Code For Post goes here
    });

    });
});

无需在html中调用onchange函数。 Jquery会处理剩下的事情

也是你的设置($ _ POST [&#39; id&#39;])也许是设置($ _ POST [&#39; fruits&#39;])

答案 1 :(得分:0)

尝试在HMTL中使用此代码。

<html>
   <head>
       <script
       src="https://code.jquery.com/jquery-3.3.1.min.js"
       integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
       crossorigin="anonymous">
       </script>
        <script>
            function listChange(obj) {
                 var recID = obj.value;
                 var recID = $("#fruits:selected").text();
                 $.ajax({
                     method: 'POST',
                     data: {'id' : recID},
                     url:'demo.php',(put url of php file and remove in this file make diffrent php file)
                     dataType: "json",
                     success: function(response)
                     {
                         console.log(response);
                     }
                 });
             }
         </script>   
     </head>
    <body>
         Fruits
         <select id="fruits" name="fruits" onchange="listChange(this)">
             <option value="0">Apple</option>
             <option value="1">Pear</option>
            <option value="2">Watermelon</option>
             <option value="3">Orange</option>
         </select>
         <br/><br/>
         My Fruit <input type="text" id="myfruit">
         <?php
         if(isset($_POST['id']))
         {
             $id = $_POST['id']; 
             echo $id;  //does not print however post is working if you look in firefox -> web developer -> developer toolbar -> network

             //the id will be used to reference a variable 
             //$results[$id]['fruit'] which I got 
             //from a database like this 
             //$results = $stmt->fetchAll(PDO::FETCH_UNIQUE);
             //this value will set the text field myfruit
         }
         ?>
    </body>
</html>

答案 2 :(得分:0)

罗杰斯回答是对的。你错过了ajax调用中的url参数。

function listChange() {
  var fruitValue = $(this).val(); // for the value i.e 0,1,2,3
        $.ajax({
            url: '/myPhpFile.php',
            method: 'POST',
            data: {'id' : fruitValue},
            dataType: "json",
            success: function(response)
            {
                console.log(response);
            }
        });
    }

如果你真的想在一个文件中调用它,你必须将php代码置于顶层,并在条件完成后退出..

<?php
  if(isset($_POST['id']))
  {
    $id = $_POST['id']; 

你需要编码为ajax期望一个json数据

$results_array = array("Id" => $id):
$json=json_encode( $results_array );
header('Content-Type: application/json'); //tell the broswer JSON is coming
echo $json; //Just plain vanillat JSON output

在这里做你的事情退出。请注意,每个echo“something”都会伪造ajax调用所期望的json数据

exit();
}
?>

答案 3 :(得分:0)

好的,我找到了一种更简单的方法。只需在更改选择时让Javascript对URL中的值进行编码,然后使用GET在PHP中访问它。

在Javascript中编码网址:

<script>
        $(document).ready(function(){  
            $("#fruits").change(function(){
                 var fruitValue = $(this).val(); 
                 window.location.href="ajax.php?id=" + fruitValue;
            });
        });
</script>

回显PHP中的值:

if(isset($_GET['id']))
{
    $id = $_GET['id']; 
    echo $id;  
}

答案 4 :(得分:-1)

通过不同的文件打印数据。 Php返回数据发送到另一个文件,ajax响应数据打印在html中。

行动档案

if(isset($_POST['id']))
{
     $id = $_POST['id']; 
     echo $id; //prints nothing
}

查看档案

function listChange() {
        var recID = document.getElementById("fruits").value;
        $.ajax({
            url: 'action.php',
            method: 'POST',
            data: {'id' : recID},
            dataType: "json",
            success: function(response)
            {
                $('#your_id').html(response);
            }
        });
    }

OR

<html>
<head>
<script
src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous">
</script>
<script>
    function listChange() {
        var recID = document.getElementById("fruits").value;
        $("#your_id").html(recID);
    }
</script>   
</head>
<body>
Fruits
<select id="fruits" name="fruits" onchange="listChange()">
    <option value="0">Apple</option>
    <option value="1">Pear</option>
    <option value="2">Watermelon</option>
    <option value="3">Orange</option>
</select>
<br/><br/>
My Fruit <input type="text" id="myfruit">
<div id="your_id"></div>
</body>
</html>

答案 5 :(得分:-3)

<script>
     function listChange() {
                var recID = document.getElementById("fruits").value;
                $.ajax({
                    url:'ajax.php'
                    method: 'POST',
                    data: {'id' : recID},
                    success: function(response)
                    {
                        console.log(response);
                    }
                });
            }

</script>

<?php

print_r($_POST);

?>