compguy24
compguy24

Reputation: 957

passing JSON data and getting it back

I'm new to passing objects through AJAX, and since I am unsure of both the passing and retrieving, I am having trouble debugging.

Basically, I am making an AJAX request to a PHP controller, and echoing data out to a page. I can't be sure I'm passing my object successfully. I am getting null when printing to my page view.

This is my js:

// creating a js filters object with sub arrays for each kind
var filters = {};

// specify arrays within the object to hold the the list of elements that need filtering
// names match the input name of the checkbox group the element belongs to
filters['countries'] = ["mexico", "usa", "nigeria"];
filters['stations'] = ["station1", "station2"];
filters['subjects'] = ["math", "science"];

// when a checkbox is clicked
$("input[type=checkbox]").click(function() {        

    // send my object to server
    $.ajax({
        type: 'POST',
        url: '/results/search_filter',
        success: function(response) {
            // inject the results
            $('#search_results').html(response);
        },
        data: JSON.stringify({filters: filters})
    }); // end ajax setup

});

My PHP controller:

public function search_filter() {

    // create an instance of the view
    $filtered_results = View::instance('v_results_search_filter');       

    $filtered_results->filters = $_POST['filters'];

    echo $filtered_results;

}

My PHP view:

<?php var_dump($filters);?>

Perhaps I need to use a jsondecode PHP function, but I'm not sure that my object is getting passed in the first place.

Upvotes: 1

Views: 206

Answers (2)

James Black
James Black

Reputation: 41858

http://blog.teamtreehouse.com/beginners-guide-to-ajax-development-with-php

When you use ajax the page is not reloaded so the php variable isn't of use.

You may want to look for a tutorial to help. I put one at the beginning as I don't see how to format this on my tablet

you will need to json_encode your response as the tutorial shows

you may want to print to a log on the server when you are in the php function and make it world readable so you can access it via a browser

I like to use the developer tools in Chrome to see what is actually returned from the server

Upvotes: 2

Calimero
Calimero

Reputation: 4288

IIRC the data attribute of the $.ajax jQuery method accepts json data directly, no need to use JSON.stringify here :

data: {filters: filters}

This way, you're receiving your json data as regular key/value pairs suitable for reading in PHP through the $_POST superglobal array, as you would expect.

Upvotes: 3

Related Questions