将数据从ajax函数传递到php文件/函数会将数据显示为NULL

时间:2018-08-16 23:28:24

标签: javascript php html ajax

我有一个页面,其中有两个选择,第一个选择汽车制造商,第二个选择汽车系列。选择选项应根据选择的制造商而变化。说如果选择了“ BMW”,那么应该显示诸如“ 3系列”,“ Z系列”之类的列表。如果我将制造商更改为“ Audi”,则它们应该更改。我已经尝试了许多尝试使用AJAX传递数据来与我的PHP函数对话,但是在“ success:function(data)”上,该数据为空,如控制台日志所示。下面是我的Ajax代码。

$(document).ready(function(){
    $('#chooseManu').on('change',function(){
        var manu = $(this).val();
        if(manu){
            $.ajax({
                url:'ServerScripts/showStock.php?manu='+manu,
                data:{'manu':manu},
                dataType: 'json',
                success:function(data){
                    // $('#chooseSeries').html(html);
                    console.log(data);
                }
            }); 
        }
    });
});

PHP功能,可根据所选制造商更改系列选项

function seriesChoice() {
  require 'connection.php';

  if (isset($_POST["manu"]) && !empty($_POST["manu"])) {
    $chosenManu = json_decode($_POST["manu"]);
    $findSeries = "SELECT DISTINCT carSeries FROM carParts WHERE carManu = ".$chosenManu;
    $series = $conn->query($findSeries);
    if ($series->num_rows > 0) {
      echo '<option value="">Series</option>';
      while($displaySeries = $series->fetch_assoc()) {
        echo '<option>',$displaySeries['carManu'],'</option>';
      }
    } else {
      echo '<option value="">Series Not Available</option>';
    }
  } else {
    echo '<option value="">Select Manufacturer</option>';
  }
}  
?>

然后我的html显示全部:

<select id="chooseManu">
              <option value="0" selected="selected">Manufacturer</option>
              <?php
                manuChoice();
              ?>
            </select>
            <select id="chooseSeries">
                <?php
                  seriesChoice();
                ?>
           </select>

在webdev工具(F12)的“网络”选项卡上,我能够看到它确实传递了“ ServerScripts / showStock.php?manu =(manu selected)”,但是在控制台日志上,数据显示为null。除非我输入“ console.log(manu)”,否则显然它也会记录选择的制造商。 我已经用很多语句进行了测试,以查看php函数中的$ _POST是否不为空和isset,都不是真的。因此,看起来该函数甚至根本看不到要传递的变量。

理解这是我的第一个实际项目,我可以看到这里有很多东西在编码世界中看不到,所以请对我保持谦虚!但是,此刻我主要关心的是让该变量可见。

如果这里没有任何解释,或者您只需要澄清,请告诉我!

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

$.ajax() is GET的默认方法。您正在寻找$_POST数组。要么使用POST:

$.ajax({
    url:'ServerScripts/showStock.php?manu='+manu,
    method:'POST',
    ...
});

或查看$_GET数组:

if (isset($_GET["manu"]) && !empty($_GET["manu"])) {

另外,您告诉$.ajax()期望返回JSON,但您将其发送为HTML。对返回的内容使用正确的数据类型:

dataType: 'html',

另外,请注意,您正在尝试将值发送两次。不知道这是否会引起问题,但是您实际上只需要发送一次即可。只需将其放在data属性中,而不是URL中即可:

$.ajax({
    url: 'ServerScripts/showStock.php',
    method: 'POST',
    data: {'manu':manu},
    dataType: 'html',
    success: function(data){
        // $('#chooseSeries').html(html);
        console.log(data);
    }
});

在这种情况下,我也认为您不需要服务器上的json_decode(),尽管我可能是错的。但是您要做需要learn about SQL injection。目前,您的代码已经可以使用了。