我有一个页面,其中有两个选择,第一个选择汽车制造商,第二个选择汽车系列。选择选项应根据选择的制造商而变化。说如果选择了“ 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,都不是真的。因此,看起来该函数甚至根本看不到要传递的变量。
理解这是我的第一个实际项目,我可以看到这里有很多东西在编码世界中看不到,所以请对我保持谦虚!但是,此刻我主要关心的是让该变量可见。
如果这里没有任何解释,或者您只需要澄清,请告诉我!
任何帮助将不胜感激!
答案 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。目前,您的代码已经可以使用了。