Как показать что-то из базы данных в раскрывающемся списке загрузки страницы просмотра с помощью вызова Ajax

Привет, я разработал все эти функции, используя основной PHP, все работает хорошо. Теперь главное, что я хочу этого в CodeIgniter, поэтому я пытаюсь перенести основной PHP-код на CI-код.

Моя цель - на странице просмотра codeIgniter будет два поля даты, называемых датой начала и конечной датой. На загрузке страницы, которая будет содержать текущие даты в обоих полях. Эти два поля даты будут использоваться для выбора диапазона дат. Эти две даты будут показаны с использованием приведенного ниже кода на странице просмотра с именем view.php

<div id="main">
 <div id="dates">
 <label for="start_date">start date:</label>
 
 <label for="end_date">end date:</label>
 
 </div>
</div>

Теперь эта страница просмотра будет вызываться из этого ниже контроллера под названием 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>

Но прежде чем я что-то реализую в модели, я проверяю, идет ли пост-вызов к методу контроллера get_ros или нет, но он не подходит. Я нахожусь посередине, не зная, как действовать дальше, и это будет здорово.

3 ответа

Прежде всего, вам нужно создать новую функцию в контроллере, которая будет получать данные из вызова 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 
 }
?>


несколько вещей,

добавьте 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 ,


Попробуйте использовать двойные кавычки " внутри одной кавычки в ajax url

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

ИЛИ

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

Надеюсь, что это имеет смысл

Также вы должны ajax вызов 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);
}
}); 
});
});

licensed under cc by-sa 3.0 with attribution.