1

I have sent of an ajax request, it then will query the database and send back what I want. However I am stuck on actually displaying this when it is returned to my page.

$.ajax({
    url: '<?php echo \Yii::$app->getUrlManager()->createUrl('cases/ajax') ?>',
    type: 'POST',
    data: { firstcategory: firstcategory },
    success: function(data) {
        for (var key in data) {
            var value = data[key];
            alert(value);
            document.write(value);
        }   
    }
});

As you can see, I am trying to display the value but it is coming back with an array.

This is what is being sent back from ajax request:

Array
(
[0] => app\models\Subcategory Object
    (
        [_attributes:yii\db\BaseActiveRecord:private] => Array
            (
                [subcategory_id] => 1
                [name] => ADJUDICATION ON BEHALF OF OR AGAINST AN INSOLVENT PARTY
                [parent_id] => 2
            )

        [_oldAttributes:yii\db\BaseActiveRecord:private] => Array
            (
                [subcategory_id] => 1
                [name] => ADJUDICATION ON BEHALF OF OR AGAINST AN INSOLVENT PARTY
                [parent_id] => 2
            )

        [_related:yii\db\BaseActiveRecord:private] => Array
            (
            )

        [_errors:yii\base\Model:private] => 
        [_validators:yii\base\Model:private] => 
        [_scenario:yii\base\Model:private] => default
        [_events:yii\base\Component:private] => Array
            (
            )

        [_behaviors:yii\base\Component:private] => Array
            (
            )

    )

[1] => app\models\Subcategory Object
    (
        [_attributes:yii\db\BaseActiveRecord:private] => Array
            (
                [subcategory_id] => 2
                [name] => THE EXISTENCE OF A CONTRACT
                [parent_id] => 3
            )

        [_oldAttributes:yii\db\BaseActiveRecord:private] => Array
            (
                [subcategory_id] => 2
                [name] => THE EXISTENCE OF A CONTRACT
                [parent_id] => 3
            )

        [_related:yii\db\BaseActiveRecord:private] => Array
            (
            )

        [_errors:yii\base\Model:private] => 
        [_validators:yii\base\Model:private] => 
        [_scenario:yii\base\Model:private] => default
        [_events:yii\base\Component:private] => Array
            (
            )

        [_behaviors:yii\base\Component:private] => Array
            (
            )

    )

[2] => app\models\Subcategory Object
    (
        [_attributes:yii\db\BaseActiveRecord:private] => Array
            (
                [subcategory_id] => 3
                [name] => THE MEANING OF CONSTRUCTION CONTRACT
                [parent_id] => 3
            )

        [_oldAttributes:yii\db\BaseActiveRecord:private] => Array
            (
                [subcategory_id] => 3
                [name] => THE MEANING OF CONSTRUCTION CONTRACT
                [parent_id] => 3
            )

        [_related:yii\db\BaseActiveRecord:private] => Array
            (
            )

        [_errors:yii\base\Model:private] => 
        [_validators:yii\base\Model:private] => 
        [_scenario:yii\base\Model:private] => default
        [_events:yii\base\Component:private] => Array
            (
            )

        [_behaviors:yii\base\Component:private] => Array
            (
            )

    )
  )

Okay, now I want to display the data in just this section:

[subcategory_id] => 1
[name] => ADJUDICATION ON BEHALF OF OR AGAINST AN INSOLVENT PARTY
[parent_id] => 2

How do i achieve this in javascript when i receive the data back in the variable "data"?

Thanks for any help you can give me


Edit:

This is my controller:

public function actionAjax() {
    if(isset($_POST['firstcategory'])) {
        $firstcategory = $_POST['firstcategory'];
        $subcategory = Subcategory::find()->all();
    } else {
        $firstcategory = "Ajax failed";
    }

    print_r($subcategory);
    exit;

    return \yii\helpers\Json::encode($subcategory);
}

Second edit:

I receive this json

[
    {
        "subcategory_id": "1",
        "name": "ADJUDICATION ON BEHALF OF OR AGAINST AN INSOLVENT PARTY",
        "parent_id": "2"
    },
    {
        "subcategory_id": "2",
        "name": "THE EXISTENCE OF A CONTRACT",
        "parent_id": "3"
    },
    {
        "subcategory_id": "3",
        "name": "THE MEANING OF CONSTRUCTION CONTRACT",
        "parent_id": "3"
    },
    {
        "subcategory_id": "4",
        "name": "THE MEANING OF CONSTRUCTION OPERATIONS",
        "parent_id": "3"
    },
    {
        "subcategory_id": "5",
        "name": "EXCLUDED CONSTRUCTION OPERATIONS",
        "parent_id": "3"
    },
    {
        "subcategory_id": "6",
        "name": "EXCLUDED AGREEMENTS",
        "parent_id": "3"
    }
]

Now in my view I am trying to parse it but I'm unsure

success: function(data) {
    obj = JSON.parse(data);
    document.write(obj.subcategory_id);
}

This isn't working?

2
  • Can you show your query? Commented Mar 31, 2015 at 8:28
  • i have edited my question for you, thanks Commented Mar 31, 2015 at 8:30

1 Answer 1

3

Change this line

$subcategory = Subcategory::find()->all();

to

$subcategory = Subcategory::find()->asArray()->all();

this will give the resultset in array format and then you can pass it as json.

Then in your ajax success, parse the Json result.

var result = $.parseJSON(data);

for(var i=0; i<result.length; i++){
    alert(result[i].subcategory_id);
}
Sign up to request clarification or add additional context in comments.

7 Comments

fantastic! now how would i display this in javascript when i receive it back as "data" in success part of my ajax.
In ajax response parse resultdata and then loop out
please can you review my second edit, this is the last answer i need and then i'm all good to go
Updated. Please check and add the code to your ajax success.
when i do this i get an error "Uncaught SyntaxError: Unexpected token A". this is what i have been getting myself while trying to solve it
|

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.