4

I am working with CodeIgniter and I have the following problem.

I have a controller function in details.php which takes an argument:

function details($id) {
    $this->datatables
         ->select('product_id, original_amount, quantity')
         ->from('orders');

    echo $this->datatables->generate();
}  

Now I need to call this from views, i.e. I want DataTables to display it like so:

<script>
$(document).ready(function() 
  $('#example').dataTable({
    ...
    'sAjaxSource' : 'admin/data/details',
    ...
  });
</script>

So, how do I pass arguments to the sAjaxSource key, namely the $id variable?

3
  • why you want to pass id in details method Commented Jun 18, 2013 at 6:03
  • instead of passing as arguments use post or get method Commented Jun 18, 2013 at 6:11
  • sir i want to do where('product_id',$id) in details method so i want to pass the value Commented Jun 18, 2013 at 6:21

2 Answers 2

20

You should use fnServerParams as specified in the docs.

$(document).ready(function() {
    $('#example').dataTable( {
        "bProcessing": true,
        "bServerSide": true,
        "sAjaxSource": "scripts/server_processing.php",
        "fnServerParams": function ( aoData ) {
            aoData.push( { "name": "more_data", "value": "my_value" } );
        }
    } );
} );
Sign up to request clarification or add additional context in comments.

3 Comments

i'm getting the error Uncaught TypeError: Cannot read property 'match' of undefined. Why ?
i am also getting same error " Cannot read property 'match' of undefined." can you provide some hint why this error getting using your solution
you have to enter the data as an arraylike: aoData.push( { "name": "name1", "value": "val1" } ,{ "name": "name2", "value": "val2" },{ "name": "name3", "value": "val3" });
3

I was struggling with this issue myself. The answer of John Moses didn't work for me, also the link he provides links to the new documentation which, I think, does not count for older versions of datatables.

Although, I found out that the current server side processing is working like jQuery, where older versions with "sAjaxSource" don't work that way.

For me, I just simpely added my parameters in the url of the sAjaxSource. So in your example code:

$customPHPvar = "mycustomvar";

<script>
$(document).ready(function() {
    $('#example').dataTable( {
        "bProcessing": true,
        "bServerSide": true,
        "sAjaxSource": "scripts/server_processing.php?customvar=<?php echo $customPHPvar; ?>",
    } );
} );
</script>

in server_processing.php

$_GET['customvar'];

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.