【问题标题】:make ajax call in material design using Codeigniter使用 Codeigniter 在材料设计中进行 ajax 调用
【发布时间】:2023-04-07 04:29:01
【问题描述】:

在我完成了这样的代码之后,我使用 Material Design lite 来构建项目,但相应的字段上没有显示任何结果。 这是我的代码,请看一下

<script>
$('#type').change(function(){
  var type=$('#type').val();
  alert(type);
  var url='<?php echo base_url(); ?>admin/vehicle/ajax_vehicle';
  alert(url);
  $.post(url, {type:type}, function(data)
  {  
    alert(); 
    componentHandler.upgradeDom();      
    $('#vehicle').html(data);
  });
});
</script>

这是我的控制器

public function ajax_vehicle()
{
    $data['vehicle']=$this->Vehicle_model->view_available_vehicles($_POST['type']);
    //var_dump($data['vehicle']);
    $this->load->view('admin/vehicle/ajax_vehicle',$data);
}

这是我的查看页面

<div class="input-field col s12">
      <select  required name="vehicle_id" id="vehicle">
       <option value=""  selected>Select</option>


      </select>
      <label>Select Vehicle</label>
</div>

var type=$('#type').val(); 正在获取价值。 当我安慰它时,我得到了这样的结果

 <select  required name="vehicle_id">
   <option value="">Select</option>
   <option value="42" >bullet</option>
   <option value="41" >pulsar</option>
</select>

这是我的ajax_vehicle,需要选择类型后显示这个的内容。

<select  required name="vehicle_id">
 <option value="">Select</option>
 <?php  if(empty($assign_vehicle_info)){
        if (!empty($vehicle)) {
        foreach ($vehicle as $veh) {?>
 <option value="<?= $veh->id ?>"<?php if (!empty($assign_vehicle_info)) { echo $assign_vehicle_info->vehicle_id == $veh->id ? 'selected' : ''; } ?>><?= $veh->name ?></option>
 <?php }}}?>
 </select>

其实不知道要添加什么额外的东西才能工作。请帮我解决

【问题讨论】:

  • 你做了什么调试? ajax调用成功了吗?它是否返回data 内的值?你需要做一些基本的调试。您基本上有效地说“它不起作用”并且没有提供具体的错误信息。它可能在很多地方都失败了,但如果没有具体的错误信息,我们只能猜测 - 有足够的未知数来创造多种可能性。
  • base_url() 是否在末尾附加了 /?如果没有,请添加一个!
  • 您的 ajax 请求有效吗?您可以使用网络浏览器的网络面板进行确认。
  • @ADyson 当我对其进行控制台并获得正确的值但该输出未显示在页面上时
  • @srimaln91 yaa 我的 ajax 请求工作正常

标签: php ajax codeigniter material-design


【解决方案1】:

如果data 包含

<select  required name="vehicle_id">
   <option value="">Select</option>
   <option value="42" >bullet</option>
   <option value="41" >pulsar</option>
</select>

正如您所说,$('#vehicle').html(data); 的结果将是

<select  required name="vehicle_id" id="vehicle">
  <select  required name="vehicle_id">
   <option value="">Select</option>
   <option value="42" >bullet</option>
   <option value="41" >pulsar</option>
  </select>
</select>

如您所见,这是无意义且无效的 HTML。 html() 函数替换所选元素的 inner HTML,而不是元素本身。

你有两个选择:

1) 更改服务器输出(即 ajax_vehicle 视图),使其仅返回 &lt;option&gt; 元素 - 也无需返回 &lt;select&gt; 的外部部分。因此,从 ajax 调用返回的结果 data 只需包含(例如):

<option value="">Select</option>
<option value="42" >bullet</option>
<option value="41" >pulsar</option>

那么你可以像以前一样继续使用$('#vehicle').html(data);

2) 使用replaceWith,即$("#vehicle").replaceWith(data); 而不是.html()。但在这种情况下,您仍然需要修改服务器输出,以便 &lt;select&gt; 包含 id="vehicle" 标记,否则此代码将无法再次运行,因为名为“vehicle”的元素将不再存在。另请记住,如果您在“车辆”元素上设置了任何事件处理程序等,它们也需要重新创建,因为您已经替换了整个元素。见http://api.jquery.com/replacewith/

在我看来选项 1 是更好的选择。

【讨论】:

  • 我已经测试了这两种情况,但不幸的是没有得到任何东西
  • 当我完成你的第二个概念时,我刚刚删除了 tag 中没有
  • “没有得到任何东西”不是错误消息或问题描述。请查看您的页面并具体说明。运行代码后,您可以在浏览器的开发人员工具中查看“车辆”元素的外观。在您使用我的第一个选项后,它包含什么?它应该只包含新选项。
  • “当我完成你的第二个概念时,我删除了 标签中没有”。真不知道这是什么意思。数据“出来”在哪里?你的意思是data 不正确,或者&lt;select&gt; 的更改替换不正确?请准确并给出最终结果的明确示例。还要确认data 的更改版本是什么样的。我无法对您的情况进行模糊的描述 - 这是一个细节问题,因此我们需要详细信息才能解决它。
  • 我已将 $("#vehicle").html(data); 更改为 $("#vehicle").replaceWith(data); 并从视图中删除了 select 标记并以
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 2023-03-05
  • 2015-03-21
  • 2015-09-04
  • 2021-06-15
相关资源
最近更新 更多