0

我有一个页面有两个选择,第一个选择汽车制造商,第二个选择汽车系列。选择选项应根据选择的制造商进行相应更改。假设如果选择了“BMW”,则应显示“3 系列”、“Z 系列”等列表。如果我将制造商更改为“奥迪”,它们应该会更改。我已经尝试过很多次尝试使用 AJAX 传递数据来与我的 PHP 函数对话,但是在“成功:函数(数据)”中,数据为空,如控制台日志中所示。下面是我的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)”,但在控制台日志中,数据显示为空。除非我“console.log(manu)”,否则显然它也会记录选择的制造商。我已经测试了许多语句,看看 php 函数中的 $_POST 是否不为空且 isset,两者都不是。所以看起来该函数甚至根本没有看到正在传递的变量。

了解这是我的第一个实际项目之一,我可以看到这里会有很多东西在编码世界中不好看,所以请对我温柔!然而,我现在主要关心的是让这个变量被看到。

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

任何帮助是极大的赞赏!

4

1 回答 1

0

的默认方法$.ajax() 是 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()在服务器上,尽管我可能是错的。但是您确实需要了解SQL 注入。目前,您的代码对其开放。

于 2018-08-16T23:35:20.837 回答