在我的一个视图中,我有一个包含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>
public function get_editions($pubid)
{
$data['edn_data'] = $this->Process_pages_model->pop_editions($pubid);
echo json_encode($data);
}
ddlEditions没有填充。它显示消息'抱歉,出了问题'。请说明我的代码有什么问题。
答案 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进行一些手动设置。现在让我们进行调试。
首先将ajax请求中的url替换为实际网址。所以替换
<?php echo base_url(); ?>pmachine/pages/get_editions/
使用实际网址,例如
localhost/pmachine/pages/get_editions/
尝试创建一个简单的ajax示例,以确保您有一个很好的处理。这是一个关于基本php / ajax示例的问题,您可以将其用作参考:
尝试回显$ data [&#39; edn_data&#39;],而不仅仅是$ data。
回复字符串而不是$ data,以确保您甚至得到回复。
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";
的print_r($ _ POST [&#39;发布商ID&#39;]);确保您获得发布的数据
尝试返回数据而不将其编码为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>");
}
},