【问题标题】:Problems while populate Drop down box with PHP, mySQL and JS使用 PHP、mySQL 和 JS 填充下拉框时出现问题
【发布时间】:2015-10-17 06:20:28
【问题描述】:

我环顾四周,找到了一个适合我的解决方案,用来自第一个框的数据填充第二个下拉框。

我的第一个下拉菜单:

$select   = $dbh->query("SELECT DISTINCT `pageid`, `name` FROM `site` ORDER BY `pageid` ASC");
$contents = $select->fetchAll(PDO::FETCH_OBJ);
foreach($contents as $content) {
< option value="< ?=$content->pageid;?>">< ?=$content->name;?>< /option>
}
< /select>
< script type="text/javascript">document.getElementById('site').value = "< ?=$_POST['site'];?>";< /script>

我的第二个下拉菜单:

< select id="page" name="page" class="form-control">< /select>
< script type="text/javascript">document.getElementById('page').value = "< ?=$_POST['page'];?>";</script>

我的 JS 代码:

$("#site").change(function() {
  $.ajax({
    url : "get_page.php?id=" + $(this).val(),
    type: 'GET',
    dataType:'json',
    success : function(data) {
      if (data.success) {
        $('#page').html(data.options);
      }
    }
  });
});

以及获取第二个下拉菜单数据的代码:

$id = $_GET['id'];
if (!isset($id) || !is_numeric($id))
  $reponse = array('success' => FALSE);
else {
  $query = $dbh->prepare("SELECT `pageid`, `page`, `pagename` FROM `site` WHERE `pageid` = :id ORDER BY `pagename` ASC");
  $query->execute(array(':id' => $id));
  $rows = $query->fetchAll(PDO::FETCH_ASSOC);
  $options = "";
  foreach ($rows as $row) {
    $options .= '< option value="'. $row[page] .'">'. $row[pagename] .'< /option>';
  }
  $response = array( 'success' => TRUE, 'options' => $options );
}
header('Content-Type: application/json');
echo json_encode($response);

一切正常。 当我按下提交按钮时,我得到了我需要的结果。但是 - 按下提交按钮后,第二个下拉列表中的数据将丢失。如果我想从第二个下拉菜单中选择另一个,我需要更改第一个下拉框,然后我需要将其更改回来,然后我可以在第二个框上进行新的选择...

抱歉 - 听起来有点糊涂...

我再解释一遍:

  1. 1) 第一个下拉框 - 选择一个域(域 A)

    2)第二个下拉框 - 数据将被加载,我选择一个页面(页面 一)

    3) 按提交按钮

    4) 我得到了我的结果

    5) 我要选择另一个页面(页面 B)

    6) 第二个下拉框为空

    7) 第一个下拉框仍然充满了我的第一个决定(域 一)

    8) 我需要关闭域 B 并返回域 A 加载数据 再次为第二个下拉框。

有没有办法将第二个下拉框的数据存储在下拉框中?

我已经测试了几种填充数据的方法 - 但上面的代码(在 Stackoverflow 上找到)是唯一的,我开始工作了。

问候 托斯滕

【问题讨论】:

    标签: javascript php jquery mysql


    【解决方案1】:

    您的数据丢失了,因为 POST 请求更新了您的文档。为防止丢失数据,您可以使用 ajax 进行提交。比如:

    $("button").on("click", function(){
        $.post(url, data);
    });
    

    更多详情见http://api.jquery.com/jquery.post/

    【讨论】:

    • 嗨,塞尔吉奥。我也尝试使用您的代码。但我不是程序员,也是 JQuery 和 Ajax 的新手……$("#step1").on("click", function(){ $.post( "sites.php", $( "#siteform" ).serialize() ); }); 我试试这段代码,其中 sites.php 是我的带有表单的 php 页面,#siteform 是我的表单的 id,#step1 是按钮的 id - 但这里也一样 - 没有任何反应。还是一样的问题...
    • 首先,你有没有把这个脚本绑定到 button#step1 上? #step1 不是提交元素。其次,请给我更多信息,到底发生了什么?脚本不工作并且什么也不返回,或者脚本工作正常,但您仍然会重新加载页面并第二次选择空?
    • $("#step1").on("click", function(){ $.ajax({ url : "get_page.php?id=" + $(this).val(), type: 'GET', dataType:'json', success : function(data) { if (data.success) { $('#page').html(data.options); } else { } } }); }); 这是我尝试的代码...但是在我按下提交按钮后,第二个下拉框仍然是空的。我没有得到任何错误或类似的东西。我得到的结果与没有此代码的结果相同...
    • 我也试试$("#step1").click(function() { $.ajax({ url : "get_page.php?id=" + $(this).val(), type: 'GET', dataType:'json', success : function(data) { if (data.success) { $('#page').html(data.options); } else { } } }); });$("#siteform").submit(function() { $.ajax({ url : "get_page.php?id=" + $(this).val(), type: 'GET', dataType:'json', success : function(data) { if (data.success) { $('#page').html(data.options); } else { } } }); });
    • $post().fail(function(error) {console.log(error)}) 返回什么?
    【解决方案2】:

    正如 Sergio 所提到的,您可以使用 jquery ajax 函数来提交表单,或者在提交后您可以在页面加载时检查它,如果 1st Drop down 的值 &gt; 0 您会触发 My JS 代码。因此,将其全部包装在一件事中,它将如下所示:

    $(document).ready(function(){
       var drpDwn1 = $('#site').val();
       if (drpDwn1 > 0) {
           // fire ajax function
           $.ajax({
           url : "get_page.php?id=" + $(this).val(),
           type: 'GET',
           dataType:'json',
           success : function(data) {
             if (data.success) {
              $('#page').html(data.options);
             }
            }
          });
       }
    });
    

    【讨论】:

    • 嗨阿卡什。我尝试添加您的代码,但没有任何反应。我在页面末尾添加代码,并尝试直接在if (isset($_POST["step1"])) { 之后添加它 - 但是按下提交按钮后第二个下拉菜单仍然是空的。
    • 逐行调试,看看drpDwn1中是否有什么。如果它的值> 0,那么只有它会加载。看看为什么它的#site 价值没有出现 > 0
    猜你喜欢
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多