【问题标题】:AJAX multiple drop down list with price update带有价格更新的 AJAX 多个下拉列表
【发布时间】:2012-05-05 02:32:36
【问题描述】:

有人可以帮我处理这段代码吗,我遗漏了一些东西,但不知道是什么。当您选择第一个列表中的一个项目时,它会弹出下一个框,但没有选项可供选择,第三个选项也是如此,尽管这次我什至没有让该框出现。

我总共需要大约 10 个下拉列表,并且在选择每个选项后,使用 sql 表中的价格列更新底部的价格(我不知道如何执行此操作),因此您的所有帮助将是太好了,已经看了至少 4 个小时了,但我没有找到任何地方。

谢谢

这里是html:

<body>
<select style="width: 150px;" name="country" id="add-event-dialog-country" onchange="getState(this.value)">
                <?php
                    echo "<option selected='selected' disabled='disabled'> Select Country</option>";
                    $result = mysql_query("SELECT DISTINCT country FROM country");
                    while($row = mysql_fetch_array($result)){
                       echo "<option value='".$row['country']."'>".$row['country']."</option>";
                    }
                ?>
           </select>
           <p id="statediv">
           <select style="width: 150px;" name="add-event-dialog-state" id="add-event-dialog-location" disabled="disabled">
                <option>Select State</option>
           </select>
           </p>
           <p id="citydiv">
           <select style="width: 150px;" name="add-event-dialog-city" id="add-event-dialog-city" disabled="disabled">
                <option>Select City</option>
           </select>
           </p>

Price =<br>
VAT = <br>
Total Price = <br>
</body>

这是 js 脚本:

<script language="javascript" type="text/javascript">
function getXMLHTTP() { 
    var xmlhttp=false;  
    try{
        xmlhttp=new XMLHttpRequest();
    }
    catch(e)    {       
        try{            
            xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e){
            try{
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch(e1){
                xmlhttp=false;
            }
        }
    }

    return xmlhttp;
}

function getState(country_Id) {     

    var strURL="findState.php?country="+country_Id;
    var req = getXMLHTTP();

    if (req) {

        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                // only if "OK"
                if (req.status == 200) {                        
                    document.getElementById('statediv').innerHTML=req.responseText;                     
                } else {
                    alert("There was a problem while using XMLHTTP:\n" + req.statusText);
                }
            }               
        }           
        req.open("GET", strURL, true);
        req.send(null);
    }       
}

function getCity(country_Id,state_id) {     

    var strURL="findCity.php?country_name="+country_Id+"&state_name="+state_Id;
    var req = getXMLHTTP();

    if (req) {

        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                // only if "OK"
                if (req.status == 200) {                        
                    document.getElementById('citydiv').innerHTML=req.responseText;                      
                } else {
                    alert("There was a problem while using XMLHTTP:\n" + req.statusText);
                }
            }               
        }           
        req.open("GET", strURL, true);
        req.send(null);
    }       
}
</script>

这里是 findState.php

<?php 
include 'classes.php';

$country = $_GET['country'];

$query="SELECT state_name FROM state WHERE country_id='$country'";
$result=mysql_query($query) or die(mysql_error());

?>
<select style="width: 150px;" id="add-event-dialog-location" name="add-event-dialog- location" onchange="getZone('<?=$country?>',this.value)">
<option selected='selected' disabled='disabled'>Select State</option>
<?php 
while($row = mysql_fetch_array($result)){
echo "<option value='".$row['state_name']."'>".$row['state_name']."</option>";}
?>
</select>

这里是 findCity.php

<?php 
include 'classes.php';

$country_id = $_GET['country'];
$state_Id = $_GET['state'];

$query="SELECT city_name FROM city WHERE country_id='1' AND state_id='1'";
$result=mysql_query($query) or die(mysql_error());

?>
<select style="width: 150px;" id="add-event-dialog-location" name="add-event-dialog- location" onchange="getZone('<?=$country?>',this.value)">
<option selected='selected' disabled='disabled'>Select State</option>
<?php 
while($row = mysql_fetch_array($result)){
echo "<option value='".$row['city_name']."'>".$row['city_name']."</option>";}
?>
</select>

我的 SQL 数据库有 3 个表

第一个名为 country 的表有 3 列 ID、国家和价格

第二个表称为状态,有 4 列 id、country_id、state_name 和 price

第三张表名为 city 有 5 列 id、country_id、state_id、city_name 和 price

【问题讨论】:

  • 您的 SQL 查询是否正常运行并按预期返回结果?
  • 嗨 weenoid,我想是的,如果我改变 $query="SELECT state_name FROM state WHERE country_id='$country'";到 $query="SELECT state_name FROM state WHERE country_id='1'";它会提出选择,通过下拉列表选择时它不会自动工作。

标签: jquery sql ajax


【解决方案1】:

In both findState.php and findCity.php you call the javascript function getZone when the selectlists changes?而且我看不到您在任何地方声明了该函数。

然后添加具有相同 ID 的州和城市选择列表。我不认为这是你的问题的原因,但它可能会在以后发生。

编辑:

您似乎在名为 country_name 的变量中提交了国家/地区 ID,但您尝试在 php 中按国家/地区访问它,而 findCity 也是如此

编辑 2:

试着把你的 findstate.php 改成这个

<?php 
include 'classes.php';

$country = $_GET['country'];

$query="SELECT state_name FROM state WHERE country_id='$country'";
$result=mysql_query($query) or die(mysql_error());

$country = "'".$country."'";
echo '<select style="width: 150px;" id="add-event-dialog-location" name="add-event-dialog- location" onchange="getZone('.$country.',this.value)">';
echo "<option selected='selected' disabled='disabled'>Select State</option>";

while($row = mysql_fetch_array($result)){
echo "<option value='".$row['state_name']."'>".$row['state_name']."</option>";}
echo "</select>";
?>

问题似乎是 php 无法识别您正在尝试将国家/地区 ID 插入到 html 选择元素中。通过回显所有内容,这应该会更容易。

【讨论】:

  • 感谢您的回复,getZone 是因为我忘记将其更改为 getCity,然后在 getCity.php 中它会有另一个。我没有注意到双重身份,现在改变了,但仍然有问题。
  • 您好 Falle 我更改了您提到的内容,但没有任何区别。以防您提到的部分仅在第二个函数上,请参阅下面我对其所做的更改...... function getCity(country_Id,state_id) { var strURL="findCity.php?country ="+country_Id+"&state="+state_Id; var req = getXMLHTTP();如果(请求){
  • 您好 Falle,我刚刚将您的更新复制并粘贴到 findstate.php 中,它的作用仍然相同,选择第一个下拉列表,然后出现第二个下拉列表,但没有来自 sql 的数据跨度>
  • 在我看来,您希望 findState.php 中的 country_id 为整数值,但似乎您使用包含国家名称的字符串值填充国家选择列表.如果是这种情况,您需要更改 echo "";回显 "";或类似的东西。
  • 嗨 Falle,感谢您抽出宝贵时间,我已经对其进行了更多研究,似乎与...有关。 $country = $_GET['country']; .... 如果我将其更改为 .... $country='1'; ..... 是否与发布表格有关?
猜你喜欢
  • 1970-01-01
  • 2013-12-24
  • 2015-09-08
  • 2019-04-16
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多