如何解决ajax unidentified索引

时间:2018-05-30 11:00:02

标签: php ajax

我查看了我的代码,看来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>';

}}
?>

4 个答案:

答案 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)

经过一些更深入的故障排除后,我发现我的javascript变量“cityID”等于“11”。我不确定为什么会这样。 11表示cityid,它是选择选项的值而不是显示文本是“anchorage”。我更改了mysql语句,以便city_name是选项值,然后我的zipcode选择框填充正确。