2013-09-05 8 views
0

ПланомИзвлечение данных из базы данных в CodeIgniter с использованием AJAX

План у меня есть, чтобы использовать JQuery для получения информации от трех полей внутри вида. Затем используйте AJAX для отправки этого входа в контроллер, который, в свою очередь, отправляет эти данные модели. Чтобы использовать для извлечения данных, отправьте результат обратно в .js-файл, а затем измените таблицу, чтобы отобразить данные внутри представления.

Проблема

Просматривая мой код, он не выглядит как данные не отправляются из .js файла в контроллер. Я думаю, это потому, что данные из базы данных не отображаются внутри измененной таблицы. Кроме того, когда я помещаю эхо внутри контроллера, чтобы отправить его обратно в .js, чтобы вызвать предупреждение, чтобы увидеть, был ли AJAX успешным. Ничего не произошло.

Мои Javascript Код

$('#bttnSubmit').click(function() { 
     // Gather the input from the view and place them into variables 
     var company = $('#client :selected').val(); 
     var dateFrom = $('#dateFrom').val(); 
     var dateTo = $('#dateTo').val(); 

     if (company != "") { 
      var post_url = "http://localhost/ProjectSage/index.php/site/members_area"; 

      $.ajax ({ 
       type: "POST", 
       url: post_url, 
       cache: false, 
       data: "company=" + company + "&dateFrom=" + dateFrom + "&dateTo=" + dateTo, 
       success: function(invoices) { 
        $.each(invoices, function(InvoiceID, CompanyName, InvRef, InvDate, InvTotal, SageReference){ 
         $('.invoice_tbody').append('<tr>'); 
          $('.invoice_tbody').append('<td class="invoice_td">' + InvoiceID + '</td>'); 
          $('.invoice_tbody').append('<td class="invoice_td">' + CompanyName + '</td>'); 
          $('.invoice_tbody').append('<td class="invoice_td">' + InvRef + '</td>'); 
          $('.invoice_tbody').append('<td class="invoice_td">' + InvDate + '</td>'); 
          $('.invoice_tbody').append('<td class="invoice_td">' + InvTotal + '</td>'); 
          $('.invoice_tbody').append('<td class="invoice_td">' + SageReference + '</td>'); 
         $('.invoice_tbody').append('</tr>'); 
        }); 
       } // End of success 
      }) // End of AJAX method 
     } else { 
      alert("You need to select an input first!!!"); 
     } // End of if statement 
    }); // End of click function 

Мой контроллер Код функции

function get_invoices() { 
    // Retrieve the data sent from the .js file using _POST method 
    $company = $_POST['company']; 
    $dateFrom = $_POST['dateFrom']; 
    $dateTo = $_POST['dateTo']; 

    // Load invoice_model 
    // Initialise the JSON header 
    // Encode the response using the parameters sent from the .js file and send it back to the .js file 
    $this->load->model('invoice_model'); 
    header('Content-Type: application/x-json; charset=utf-8'); 
    echo(json_encode($this->invoice_model->get_invoices($company, $dateFrom, $dateTo))); 
} 

Моя модель Код функции

function get_invoices($company, $dateFrom, $dateTo) { 

// Query to retrieve data from database 
// Sent it back to the controller to be populated into a table 

$ONEDB = $this->load->database('ONEDB', TRUE); 
$ONEDB->select('InvoiceID, CompanyName, InvRef, InvDate, InvTotal, SageReference'); 
$ONEDB->where('ClientID', $company); 
$ONEDB->where('InvDate >=', $dateFrom); 
$ONEDB->where('InvDate <=', $dateTo); 
$ONEDB->join('Supplier', 'Supplier.SupplierName = InvDetail.InvSupplier'); 

$query = $ONEDB->get('InvDetail'); 

$result = $query->result(); 

return $result; 

} 

Вопрос

Кто-нибудь знает, где я поступил не так, и какое исправление для моей проблемы? ???

Благодаря

ответ

0

Вы должны определить error функцию $.ajax вызова. Таким образом, вы увидите, что вы получаете внутреннюю ошибку сервера, что тоже возможно.

Кроме того, у вас может быть включена защита CSRF в CodeIgniter, поэтому вам также необходимо передать хеш CSRF на сервер.

+0

Положите функцию ошибки в $ .ajax, и результат все тот же – user2482793

0

мои сомнения is..the установить путь к вашей функции контроллера не является правильным

ваш URL, чтобы отправить данные в

var post_url = "http://localhost/ProjectSage/index.php/site/members_area"; 

, где в качестве функции контроллера является

function get_invoices() { 
.... 

параметры URL-адреса ajax, путь должен указывать на функцию contoroller, о которой я сомневаюсь, что она указывает здесь в вашем коде.

не уверен, но я думаю, что это должно быть

var post_url = "http://localhost/ProjectSage/index.php/site/members_area/get_invoices"; 

если members_area это вы контроллер здесь.

и лучше отправлять данные как объекты.

data: {"company":company,"dateFrom":dateFrom,"dateTo":dateTo}, 

Вам не нужно использовать тип контента при использовании echo json_encode.

$this->load->model('invoice_model'); 
echo json_encode($this->invoice_model->get_invoices($company, $dateFrom, $dateTo)); 
+0

извините. Сделал изменение, и результат все тот же. – user2482793

+0

убедитесь, что ajax вызывает ваш contoller .. проверьте вашу консоль ... обновите мой ответ. Запустите его – bipen

+0

Проверенный контроллер и все выглядит нормально – user2482793

0

Я думаю, что проблема заключается в том, как вы отправляете свои данные контроллеру. в вашем AJAX позвонить вы следующее:

$.ajax({ 
    type: "POST", 
    url: post_url, 
    cache: false, 
    data: "company=" + company + "&dateFrom=" + dateFrom + "&dateTo=" + dateTo, 
}); 

вы отправляете данные в формате GET .. для того, чтобы PHP, чтобы получить должность, вы должны сделать следующее:

$.ajax({ 
    type: "POST", 
    url: post_url, 
    cache: false, 
    data: {company: company, dateFrom:dateFrom , dateTo:dateTo} 
}); 

также, в контроллере, попробуйте использовать хелперы CodeIgniter как таковой:

$company = $this->input->post('company'); 
$dateFrom= $this->input->post('dateFrom'); 
$dateTo= $this->input->post('dateTo'); 
+0

изменил формат на то, что вы предложили, и результат все тот же – user2482793

+0

также, я бы не полагался на оповещения. попробуйте использовать консоль вашего браузера или firefox firefoxer пользователя, чтобы посмотреть на заголовок сети и ответ – CodeGodie

+0

, проверил консоль, никаких ошибок не было. Кроме того, все правильно загружается в заголовке сети и ответе – user2482793

0

хммм .. попробуйте изменить Ajax вызов к этому:

var url = "http://..."; 
var dataToSend= {company: company, dateFrom: dateFrom.....}; 
    $.post(url, dataToSend, function(data) { 

     ...sucess code 

    }); 
+0

Изменен код на то, что вы указали выше, и до сих пор не повезло. – user2482793

1

ОК, давайте начнем с нуля. 1) На ваших JS, поместите предупреждение после того, как:

var company = $('#client :selected').val(); 
    var dateFrom = $('#dateFrom').val(); 
    var dateTo = $('#dateTo').val(); 
ALERT(company, dateFrom, dateTo); 

ли переменные имеют данные. Если да, продолжайте. 2) проверьте URL-адрес. вставьте свой url в браузер и посмотрите, действительно ли контроллер вызывается. если это не так, исправьте этот url.

3) измените ваш вызов ajax на jquery, его проще. Также добавьте предупреждение в свой код успеха.

var url = "http://..."; 
var dataToSend= {company: company, dateFrom: dateFrom.....}; 
    $.post(url, dataToSend, function(data) { 

     ALERT(data); 

    }); 

4) на PHP контроллер, тест, если данные поступают так:

function get_invoices() { 
    $company = $this->input->post('company'); 
    $dateFrom= $this->input->post('dateFrom'); 
    $dateTo= $this->input->post('dateTo'); 

    echo $company; 
    echo $dateFrom; 
    echo $dateTo; 

} 

5), что вы получите?

+0

были ли у вас получаешь любые результаты? – CodeGodie

+0

как все прошло? надеюсь, что помог – CodeGodie

+0

эй спасибо за терпение, я не получаю эхо на шаге 4, и предупреждение о $ .post не появилось. Так что я догадываюсь, что мои данные не переходят к файлу PHP правильно? – user2482793

Смежные вопросы