0

我有这个java脚本:

    $("#judet div.jqTransformSelectWrapper ul li a").click(function(){     
var jud= $("#judetul1").val(); 
$.ajax({
        type: "POST",
        url: "rental/cms/inc/ajax/cities.php",
        data: { 'jud': jud },
        success: function (msg) {

            $("#oras").html(msg);

        },
        error: function (xhr, err) {
            alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
            alert("responseText: " + xhr.responseText);
        }
    });     
    });

这个html:

<div class=" h">
   <span class="block">Orasul</span>
   <div class="select6" id="oras">

   <select name="oras1" id="oras1"   onchange="zone1();sectorul();">

   </select>
  </div>
   <div class="clear"></div>
   </div>
   <div class="clear"></div>

这个php:

public function get_oras($code3) { 
echo "<option selected='selected' value='0'>Alege oras</option>";
        $code='PPLA';
        $code2='PPLA2';
        $sql="SELECT * FROM `locatii` WHERE (`feature_code`=:code OR `feature_code`=:code2) AND `admin1_code`=:code3 ORDER BY `asciiname` ASC";
        $stmt = $this->dbh->prepare($sql);
        $stmt->bindParam(':code', $code, PDO::PARAM_STR, 30);
        $stmt->bindParam(':code2', $code2, PDO::PARAM_STR, 30);
        $stmt->bindParam(':code3', $code3, PDO::PARAM_INT);

        $stmt->execute();
        foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $result) 
        {
             $oras[]="<option value='".$result['geonameid']."'>".$result['asciiname']."</option>";

        }
    return $oras;

}

judetul的html:

<div class=" h">
 <span class="block">Judetul</span>
  <div class="select6" id="judet">
  <?php $judetul=$db->get_judet(); ?>
  <select name="judetul1" id="judetul1"  >
  <option selected="selected">---</option>
  <?php foreach ($judetul as $val=>$k) { ?>
  <option value="<?php echo $val; ?>"><?php echo $k; ?></option>
  <?php } ?>
  </select>
  </div>
  <div class="clear"></div>
  </div>
  <div class="clear"></div>

问题是:当我更改 judetul1 时,我需要填充 oras1。当我更改 judetul1 选项时,选择 oras1 不会从 db 获取值。

我该如何解决?

4

2 回答 2

0

我在您的代码中看到两件事,这可能会导致问题。

首先,在您的 HTML 中,您不会将来自 ajax 的接收值放在“#oras1”中,而是放在“#oras”中:

success: function (msg) {
    $("#oras").html(msg); // use $("#oras1").html(msg);
},

其次,您应该将您的 PHP 更改为:

public function get_oras($code3) { 
    $oras .= "<option selected='selected' value='0'>Alege oras</option>"; // make change here
    $code='PPLA';
    $code2='PPLA2';
    $sql="SELECT * FROM `locatii` WHERE (`feature_code`=:code OR `feature_code`=:code2)   AND `admin1_code`=:code3 ORDER BY `asciiname` ASC";
    $stmt = $this->dbh->prepare($sql);
    $stmt->bindParam(':code', $code, PDO::PARAM_STR, 30);
    $stmt->bindParam(':code2', $code2, PDO::PARAM_STR, 30);
    $stmt->bindParam(':code3', $code3, PDO::PARAM_INT);

    $stmt->execute();
    foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $result) 
    {
         $oras .="<option value='".$result['geonameid']."'>".$result['asciiname'].</option>"; // make change here

    }
    return $oras;

}

在您将普通的 PHP 数组发送到 JavaScript 之前,这永远不会奏效。因此,它需要像 JSON 这样的“序列化”。在您的情况下,最简单的解决方案是将所有内容放入 String 并返回它。AJAX 将是一个字符串,您可以简单地将其注入到您的 HTML 中。另一种解决方案是回显字符串的每个部分。

于 2013-10-16T10:37:33.227 回答
0

这是我之前开发选择框时遇到的一个问题。

这里可能会发生两件事。1. judetul1中没有触发onchange事件。如果要检查这一点,只需打开浏览器调试并在“网络”中观察,看看是否向其他页面发送请求以从 db 获取值。

注意:onchange 是 jqtransform 某些版本的问题

2.问题可能 jqtransform 仅“美化”您的选择输入一次(可能在文档准备就绪时)。当您更改 judetul1 中的选项时,它会更新 oras1 选择框中的选项列表。但是由于您没有再次调用 jqtransform 来再次“美化”您的选择输入,因此选项文本不会按照您的意愿进行更新。

如果您仍然需要修复此问题,确实有解决方案。

于 2013-12-09T14:37:56.330 回答