1

The Plan

The plan I've got is to use JQUERY to retrieve input from three fields inside the view. Then use AJAX to send that input to the controller, which in turn sends that data the model. To be used to retrieve data, send the result back to the .js file and then amend a table to display the data inside the view.

The Problem

Looking through my code, it doesn't look like the data isn't being sent from the .js file to the controller. I think this because the data from the database isn't being displayed inside the amended table. Also, when I put an echo inside the controller to be sent back to the .js to trigger an alert, to see if the AJAX was successful. Nothing happens.

My Javascript Code

 $('#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

My Controller Function Code

  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)));
 }

My Model Function Code

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;

}

Question

Does anybody know where I have gone wrong and what the fix to my problem is???

Thanks

4

5 に答える 5

0

うーん..これにあなたのajax呼び出しを変更してみてください:

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

       ...sucess code

    });
于 2013-09-05T16:45:42.107 に答える
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');
于 2013-09-05T16:34:15.193 に答える
0

私の疑いは..コントローラー関数への設定パスが正しくありません

データを投稿する URL は

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

あなたのコントローラー機能はどこにありますか

function get_invoices() {
 ....

ajax url options 、 path は、コード内で指しているとは思えないコントローラー関数を指す必要があります。

確かではありませんが、そうあるべきだと思います

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));
于 2013-09-05T16:30:39.163 に答える
0

error呼び出しで関数を定義する必要があります$.ajax。したがって、内部サーバー エラーが発生するかどうかがわかります。これも可能です。

また、CodeIgniter で CSRF 保護を有効にしている可能性があるため、CSRF ハッシュもサーバーに渡す必要があります。

于 2013-09-05T16:30:05.553 に答える