我很高兴编码,认为我不再遇到问题(至少现在,至少),直到我来到我的应用程序的AJAX部分。
首先,有点背景知识。我正在制作日历/计划应用程序。我的控制器从模型加载数据(一个相当复杂的数组)并将其传递给我的index()函数中的视图。一直都很好。 现在,我想通过ajax更新我的数据。我正在展示一堆日期,当用户点击“上一个”或“下一个”按钮时,我想显示上一个/下个月。
我过去能够用超级凌乱和简单的坏代码做到这一点。我现在重写了我的代码,但现在我被卡住了。我对以下函数进行了AJAX调用:
public function change_dates()
{
$month = $this->input->post('month');
$year = $this->input->post('year');
$dates = $this->planner_model->create_date_list($month, $year);
// echo $dates back to ajax? :(
}
我获取post值,将它们发送到我的模型,将数据保存在数组中,然后我就卡住了。因为数据数组很复杂,所以在我看来,我有一个foreach循环。如果我只是将它回到我的视图的ajax调用中,我就无法对它做任何事情。我不能在这里使用.html()
来获取我的数据。我需要一种方法来更新我的视图中的整个数组与新值,如果这是有道理的?我试过像$this->load->vars()
这样的东西,但我有点像新手,我甚至不知道这是不是正确的做法,哈哈。
提前致谢。
答案 0 :(得分:0)
确保您的网页使用$this->load->view()
与页眉,页脚等分开加载视图片段(创建日历的html)。
当您对change_dates()
进行AJAX调用时,请执行此操作,然后仅加载 该视图文件,并使用$this->load->vars()
或{{1}传递新数据}}。如果您只需加载视图(如果它是AJAX请求),只需检测AJAX调用:
$this->load->view('calendar', $data)
在你的jQuery中,你会期望html作为返回值。只需获取值并将其加载到div或使用html()或load() jQuery函数显示日历的任何位置。你基本上只是重新加载整个东西,这可以确保你获得正确的输出。
public function change_dates()
{
$month = $this->input->post('month');
$year = $this->input->post('year');
$dates = $this->planner_model->create_date_list($month, $year);
if ($this->input->is_ajax_request()) // Available as of CI 2.0
{
$data['dates'] = $dates;
$this->load->view('calendar', $data);
// You may need to load other data here, If so, consider a common function that
// can be shared with your main view to render the calendar
}
}
使用上面的方法,但回显/退出json_encode()数据到你需要的任何形式,然后确保期望jQuery的json返回值。现在,您将获得一个数组,您可以根据自己的选择操作文档。
如果你使用的是旧版本而不是2.0 - It's time to upgrade !,但这里是他们用于ajax检测的功能(对它来说不多):
$.get(url, function(response) {
$('#main_content').html(response);
}, 'html');// will usually use auto detection
// Or when you KNOW you're expecting HTML
$('#main_content').load(url);
// Or without the ajax detect (slower, less recommended)
$('#main_content').load(url + ' #main_content');