0

Alright so I am using Yii and need to pass some data to the controller method called events and my jQuery ajax call looks like this

var objectToSend = { "categories" : [selectedOption],"datefrom" : month + "" + year , "dateto" : month + "" + year};



                $.ajax({
                        url: '<?php echo Yii::app()->createUrl('calendar/events'); ?>',
                        type: "POST",
                        data: objectToSend,

                        success: function(data) {
                            console.log(data);
                        },
                        error: function() {
                            console.log('failed');
                        }

                    });

So what I would like to do is send the data to the calendar/events , which would then be "catched" by events method, do some DB fetching and bring back data to the jQuery uppo success. Problem is that I always get error logged and the message (failed) to console when doing it. I get an empty string back from the controllers method, which is weird. I am just testing it out with simple code in it, looks like this

public function actionEvents()
    {

        $data = json_decode(Yii::app()->request->getPost('data'),true); // assoc array is returned if second param is true

        echo json_encode($data);
            Yii::app()->end();
    }

I am guessing the problem lies in data object sent to the method without data={ json data here }, but only as { json data here } without the "data=" part. What do you think? Is there a way I can "prefix" the data object send to PHP file with "data="somehow ? I appreciate all the help

5
  • I guess you could use an array similar to the ones generated when serializing a form with JQuery so you can set the "data" name to the info you are sending. I would suggest using Firebug to check what are you exactly sending to the server tho. Commented Sep 4, 2013 at 9:26
  • On error, I get returned "null" when logging data. Commented Sep 4, 2013 at 9:28
  • POST sent to the method is "categories%5B%5D=test-category-for-events&datefrom=82013&dateto=82013" Commented Sep 4, 2013 at 9:28
  • 1
    data: {data:objectToSend} try this. Commented Sep 4, 2013 at 9:29
  • Ineersa thank you very much my friend ! :) That actualy works and the POST data finaly has a good setup and looks like " data {"categories":["test-category-for-events"],"datefrom":"82013","dateto":"82013"} " Commented Sep 4, 2013 at 9:33

1 Answer 1

2

jQuery API docs say that $.ajax's data param "is converted to a query string". As a result, json_decodeing it is useless. If you want to send JSON data, you'll probably need to JSON.stringify your objectToSend first. If you do this, you should also set an appropriate Content-Type header.

Apparently Yii won't decode a JSON POST body by itself but according to PR 2059 you can use either PHP's json_decode or Yii's version and get the POST body with Yii::app()->request->getRawBody().

My guess is that you probably don't want to json_decode your data and just use the POST variables directly:

Yii::app()->request->getPost('categories');
Sign up to request clarification or add additional context in comments.

1 Comment

After stringifying data sent I get POST looking like this "{"categories":["test-category-for-events"],"datefrom":"82013","dateto":"82013"}"

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.