我查看了我的代码,看来city_id是由ajax设置的,我看不出为什么我仍然得到未定义的索引。我现在已经看了太多时间。请帮我找到原因。
修改以添加广告。信息。: 此脚本从mysql db填充国家,州,城市,邮政编码的选择框。除最后一个邮政编码框外,所有工作都正常。如果我在ajaxData.php中明确设置了city_id,那就行了,这就是为什么我知道我错过了什么。
address.php
</select>
<select name="city_id" id="city_id">
<option value="">Select state first</option>
</select>
<select name="zipcode" id="zipcode">
<option value="">Select city first</option>
<script>
$('#city_id').on('change',function(){
var cityID = $(this).val();
if(cityID){
$.ajax({
type:'POST',
url:'ajaxData.php',
data:{city_id: cityID},
//data format changed as per suggestion.
dataType:'html',
success:function(html){
$('#zipcode').html(html);
console.log(html);
}
});
}else{
$('#zipcode').html('<option value="">Select city first</option>');
}
});
</script>
ajaxData.php
<?php
$city_id=$_POST['city_id'];
if(isset($_POST["city_id"]) && !empty($_POST["city_id"])){
//Get all zipcode data
$query =mysqli_query($conn, "SELECT * FROM zipcodes WHERE city_name =
'$city_id' AND status = 1 ORDER BY zipcode ASC");
$num_rows = mysqli_num_rows($query);
if($num_rows > 0){
echo '<option value="">Select zipcode</option>';
while($row = $query->fetch_assoc()){
echo '<option value="'.$row['zipcode'].'">'.$row['zipcode'].'</option>';
}
}elseif($num_rows = 0){
echo '<option value="">Zipcode not available</option>';
}}
?>
答案 0 :(得分:0)
我认为您在ajax请求中设置数据有误。尝试将其设置为如下对象:
$.ajax({
type:'POST',
url:'ajaxData.php',
data:{city_id :cityID},
dataType:'html',
答案 1 :(得分:0)
这里的问题是您发布数据的方式;你在AJAX中做了以下事情;
data:'city_id='+cityID,
你需要;
data: { city_id: cityID },
这是因为数据是引用的对象,而不是查询字符串
如果您想使用查询字符串,那么出于所有意图和目的,您可以拥有;
url:'ajaxData.php?city_id=' + cityID,
但是,我个人建议不要这样做,因为它可能会被捎带,但这肯定不会发生
答案 2 :(得分:0)
你可以试试这个
$.post('ajaxData.php', { city_id: cityID })
.success(function(html) {
...
});
不要将数据用作字符串,您必须转义所有值。您应该始终在PHP级别上调试接收的值。至少你总是可以转储POST内容,看看你收到了什么。
当您将用户值发送到数据库时,不要忘记用户值,否则您的应用程序很容易变得难以理解。
答案 3 :(得分:0)