Balkyto
Balkyto

Reputation: 1520

How to call specific PHP function using Ajax and result from JQuery

My first contact with Ajax is happening right now, and I'm kind a confused. I've read many of questions asked, but I'm not able to read the answer, that is most likely here somewhere.

Situation is, I'm using OOP PHP approach, and all I do go through index.php with parameters. So I do not call any other .php file in form posts, button clicks..

I've created an HTML listbox (which I'd like to remove vertical scrollbar, but that's just a bonus to resolve), which feeds my categories in it.

Now, by clicking each category I'd like to call certain function that would then generate output for the other div.

function swapContent(){
$("#myPresentDiv").html('<img src="../../imgs/ajax-loader-big.gif"/>').show();
var cat = $('#listbox').val();
$("#action").change(alert(cat));
var url = "&s=".cat;
$.post(url, {contentVar: cat} ,function(data) {
   $("#myPresentDiv").html(data).show();
});  

}

So, my JQuery script picks up correct Category, I alert it to alert dialog, so I'm sure that's fine, and then with code as it is at the moment, I reload my whole page so I get, page in page in page in page...

I'm trying to figure out how to write JQ ajax call, that would return only the results, not the whole page.

can I put URL "index.php&s="cat, and then somehow tell to ajax "go through index, call function displayresults ($cat); ?

Hope everything I wrote make sense to you :)

Tnx.

Upvotes: 1

Views: 3780

Answers (6)

romaninsh
romaninsh

Reputation: 10664

You might want to look into some frameworks, as they can make this for you infinitely easier to implement:

http://demo.atk4.com/demo.html?t=20

Upvotes: 0

sakhunzai
sakhunzai

Reputation: 14470

I think you are searching for a GENERAL strategy to handle ajax requests its upto you

for example Server Side Ajax

unless you are using a specific framework (CI , yii etc)

Upvotes: 0

web-nomad
web-nomad

Reputation: 6003

I did the exact thing for a internal app quite some time ago....What happened was i was passing the class name, function name and the function parameters via ajax variables and reading the same in php at the backend and then call the appropriate function in the class with those paraeters.

The PHP code:

$option = trim($_GET['v']);

switch ( $option ) {
    case 1:
        $sid    = trim($_GET['q']);
        $page   = trim($_GET['p']);
        $method = trim($_GET['m']);

        $class  = new $page( $link );
        echo $class->$method( $sid );
    break;
    case 2:
        $page   = trim($_GET['p']);
        $method = trim($_GET['m']);

        $class  = new $page( $link );
        echo $class->$method();
    break;
    default:
        echo '';
    break;
}

But this was an internal app, so there was no injection attacks, xss,xsrf,session hijack issues....things might differ for you

Hope this helps.

Upvotes: 0

halfer
halfer

Reputation: 20439

Yeah, that makes sense. Your question is basically: when you get a result of an AJAX op and insert it into your page, it inserts the whole layout again, rather than the template.

OK, so the solution is to make a call to a PHP script that is "unstyled" i.e. has no template data. Your PHP script should therefore just output a short HTML snippet rather than a page (you might have a 'header' and 'footer' that can be removed for this page). What action you need to take depends what you're using on the server side - framework? CMS? Custom PHP app?

Upvotes: 0

Broncha
Broncha

Reputation: 3794

The url's your ajax function call, must return only the page parts and not the whole html document. If you have

$.post('ajax.php',data,function(d){
  $('#responsediv').html(d).show();
});

The file ajax.php must only return the page parts,like

<div>This is the new content</div>    

so you will not have page inside page.

Upvotes: 1

Nicola Peluchetti
Nicola Peluchetti

Reputation: 76880

If you look at the frameworks or cms out there, they basically have routes that map calls to your index.php function to methods of the controller.

This is a complex argument, you could try to start out reading this article

Upvotes: 0

Related Questions