Codeigniter中的级联下拉列表无法正常工作

时间:2017-07-12 20:11:32

标签: php jquery codeigniter

在我的一个视图中,我有一个包含2个下拉列表的模式弹出窗口(ddlPublications& ddlEditions)。在页面加载时,ddlPublications将被填充,而ddlEditions将保持为空。但是,ddlEditions将填充在onchange事件上ddlPublications。

视图

<div class="modal-body" style="height: 100%;">
    <div class="col-md-12">
        <div class="form-group">
            <label>Publication</label>
            <select id="ddlPublication" name="ddlPublication" class="form-control" onchange="load_editions(this.value)">
                <option value="0">--select--</option>
                <?php
                    foreach ($pub_data as $key => $pdata) {
                ?>
                    <option value="<?php echo $pdata['pub_id'];?>"> <?php echo $pdata['pub_title'];?> </option>
                <?php
                    }
                ?>
            </select>
        </div>
    </div>
    <div class="col-md-12">
        <div class="form-group">
            <label>Edition</label>
            <div id="edn_div_data">
                <select id="ddlEdition" name="ddlEdition" class="form-control">
                    <option value="0">--Select--</option>
                </select>
            </div>
        </div>
    </div>
</div>

<script>
    function load_editions(pub_id){
        alert(pub_id);
        var p_id = pub_id;
        $.ajax({
            type: "POST",
            url: "<?php echo base_url(); ?>pmachine/pages/get_editions/"+pub_id,
            dataType: 'json',
            success: function(result){
                $("#edn_div_data").html(result);
            },
            error: function(result) {
                $("#edn_div_data").html("Sorry, something went wrong");
            }
        });
    }
</script>

CONTROLLER

public function get_editions($pubid)
{
    $data['edn_data'] = $this->Process_pages_model->pop_editions($pubid);
    echo json_encode($data);
}

问题

ddlEditions没有填充。它显示消息'抱歉,出了问题'。请说明我的代码有什么问题。

3 个答案:

答案 0 :(得分:0)

尝试改变你的ajax pist功能和你的控制器:

$data['edn_data'] = $this-> Process_pages_model->pop_editions($_POST['pubid']);

Ajax调用

     $.ajax({
         type: "POST",
         url: "<?php echo base_url(); ?>pmachine/pages/get_editions/" 
         data: {pubid: pub_id},
         dataType: "json",  
         cache:false,
            success: function(result){
                $("#edn_div_data").html(result);
            },
            error: function(result) {
                $("#edn_div_data").html("Sorry, something went wrong");
            }
        });

答案 1 :(得分:0)

很难说这个问题可能在这里,因为我看到有几个地方可能会失败。首先,确保您已进行调试。您可以使用内置的分析器https://www.codeigniter.com/userguide3/general/profiling.html,或者我相信您可以使用xdebug进行一些手动设置。现在让我们进行调试。

  1. 首先将ajax请求中的url替换为实际网址。所以替换

    <?php echo base_url(); ?>pmachine/pages/get_editions/使用实际网址,例如

    localhost/pmachine/pages/get_editions/

  2. 尝试创建一个简单的ajax示例,以确保您有一个很好的处理。这是一个关于基本php / ajax示例的问题,您可以将其用作参考:

    Basic PHP and AJAX

  3. 尝试回显$ data [&#39; edn_data&#39;],而不仅仅是$ data。

  4. 回复字符串而不是$ data,以确保您甚至得到回复。

  5. print_r($ this-&gt; Process_pages_model-&gt; pop_editions($ _ POST [&#39; pubid&#39;]));确保您从数据库中获取信息。如果您没有得到任何内容,请确保通过基本连接测试连接到您的数据库:

    // Create connection
    $conn = new mysqli($servername, $username, $password);
    
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    echo "Connected successfully";
    
  6. 的print_r($ _ POST [&#39;发布商ID&#39;]);确保您获得发布的数据

  7. 尝试返回数据而不将其编码为JSON并删除 来自你的ajax请求的dataType:json

答案 2 :(得分:0)

你的ajax成功函数取代了整个'edn_div_data',我怀疑你在结果中重建了DOM。

尝试console.log结果,并假设结果为:

{"edn_data":[{"edn_id":"1","edn_title":"Edition 1"},{"edn_id":"2","edn_title":"Edition 2"},{"edn_id":"3","edn_title":"Edition 3"}]}

并将您的ajax成功函数替换为:

success: function(result){
    for (var i = 0; i <= result.edn_data.length - 1; i++) {
        $("#ddlEdition").append("<option value='"+result.edn_data[i].edn_id+"'>"+result.edn_data[i].edn_title+"</option>");
    }
},