1

嗨,我使用核心 PHP 开发了所有这些功能,一切运行良好。现在主要的是我想要在 CodeIgniter 中使用这个,所以我试图将核心 PHP 代码转换为 CI 代码。

我的目标是在 codeIgniter 的视图页面中,将有两个日期字段,称为开始日期和结束日期。在页面加载将包含两个字段中的当前日期。这两个日期字段将用于选择日期范围。这两个日期将在名为 view.php 的视图页面中使用以下代码显示

<!doctype html> 
<html lang="en">
<head>
  <meta charset="utf-8" />
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
  <script>
$(function() {
    $( "#start_date" ).datepicker({
      defaultDate: "+1w",
      dateFormat: "yy-mm-dd",
      changeMonth: true,
      numberOfMonths: 3,
      onClose: function( selectedDate ) {
        $( "#end_date" ).datepicker( "option", "minDate", selectedDate );
      }
    }).datepicker("setDate", "0");
    $( "#end_date" ).datepicker({
      defaultDate: "+1w",
      dateFormat: "yy-mm-dd",
      changeMonth: true,
      numberOfMonths: 3,
      onClose: function( selectedDate ) {
        $( "#start_date" ).datepicker( "option", "maxDate", selectedDate );
      }
    }).datepicker("setDate", "0");
});
</script>
</head>
<body>
<div id="main">
    <div id="dates">
        <label for="start_date">start date:</label>
        <input type="text" id="start_date" name="start_date" />
        <label for="end_date">end date:</label>
        <input type="text" id="end_date" name="end_date" />
    </div>
</div>

</body>
</html>

现在这个视图页面将从下面这个名为 show.php 的控制器中调用。

<?php if(! defined('BASEPATH') ) exit("NO Direct Script Access Allowed");

class Show extends CI_Controller{

        public function __construct()
        {
            parent::__construct();
                    $this->load->model('view_model');
            }

            public function view()
            {
                 $this->load->view('view');
            }
}

现在我们可以在正确的 CI 配置中看到视图页面中的两个日期字段。我可以看到这一点。现在我想发送这两个日期字段来查询数据库中的某些内容,获取它们并使用 Ajax 调用将其显示在下拉列表中。所以我尝试通过以下方式做到这一点。

$(document).ready(function(){

var from_date = $("#start_date").val();
var to_date = $("#end_date").val();

$.ajax({
  type: 'POST',
  async: false,
  url: '<?php echo base_url().'show/get_ros';?>',
  data : { from: from_date , to: to_date },
  success : function(res){
    $('#ro').html(res);
  }
}); 

});

上述函数被添加到视图文件中,另一个 div 标记将被添加到视图文件中以显示此 Ajax 调用的结果。

<div id="result">
    <select name="ro" id="ro">

    </select>
</div>

但是在我在模型端实现某些东西之前,我正在检查 post call 是否来到控制器方法 get_ros ,但它没有到来。我在中间不知道如何进行任何人都会帮助它会很棒。

4

3 回答 3

1

首先,您需要在控制器中创建一个新函数,该函数将从 ajax 调用中接收数据

<?php
    public function get_ros(){
        if($this->input->post(null)){
            //print_r($this->input->post());die;              #just to check if the values alerted in the success function of the ajax call or else commnet this line.
            echo $result = $this->your_model->your_function();  #call the model function to return the result in HTML markup or whatever   
        }else{
            echo '0';                                       #if no post submission is found just echo 0
        }
    }
?>

在您的模型中,您将获得 post 变量:

<?php
    function your_function(){
        ### dump the post variables into local variables ###
        $from   = $this->input->post('from_date', true);
        $to     = $this->input->post('to_date', true);
        #query your database as you like and "return " the data         
    }
?>
于 2013-06-27T07:50:44.887 回答
0

尝试"在单引号内 使用双引号ajax url

url: '<?php echo base_url()."show/get_ros";?>',

或者

url: '<?php echo site_url("show/get_ros");?>',

希望有意义

ajax此外,您应该将焦点呼叫从第二个日期字段中包装出来

$(document).ready(function(){
$("#end_date").focusout(function(){

var from_date = $("#start_date").val();
var to_date = $("#end_date").val();

$.ajax({
type: 'POST',
async: false,
url: '<?php echo base_url()."show/get_ros";?>',
data : { from: from_date , to: to_date },
success : function(res){
$('#ro').html(res);
}
}); 
});
});
于 2013-06-25T15:07:25.860 回答
0

一些事情,

将 errorHandler 添加到您的 ajax 请求中,例如

error:function(XMLHttpRequest,textStatus,errorThrown){console.log('status: '+textStatus+'error: '+errorThrown}});

这样您就可以在控制台中看到响应状态,如果没有错误,请记录您的响应

我不太喜欢 php,但 javascript 不认为“show/get_ros”是 js 变量吗?所以一定是

url: '<?php echo base_url()."show/get_ros";?>',

而且我不太喜欢ajax调用,但数据选项必须是对象还是字符串?所以宁可

data :  "from="+from_date+"&to="+to_date ,
于 2013-06-25T15:11:19.937 回答