Salut

J'ai un petit probleme avec l'Ajax

Ce que je fais

Dans un premier temps j'utilise une methode qui me permet de recuperer mes datas en JSON:

en PHP

public function Attribute($id){

        $params = [
            'conditions' => [
                'category_id' => $id
            ]
        ];

        $this->loadModel('Attribute');
        header('Content-Type: application/json; charset=utf-8');
        $attributes = $this->Attribute->find('all',$params);
            $return['json'] = json_encode($attributes);
            echo json_encode($return);
            die();
    }

et en JS:


$(document).ready(

    $(".getAttId").click(function(){


        attributeID = $(".getAttId").val();

        var label = $(this);

        var url = "/users/Attribute/" + attributeID;


        var data = {

            "action": "test"

        };
        $.ajax({
            type: "GET",
            dataType: "json",
            url: url, 

            success: function(data) {
                $(".resulta").html(
                    "Name: " + data['id']
                );
                var result = data['json'];

              alert("DEBUG JSON: " + result);

            }
        });
        return false

    })



)

Ce que je veux

Je veux recuperer par exemple le nom qui se trouve dans le json par exemple:
result.Attribute.name

(mon JSON):

json :"[{"Attribute":{"id":"1","product_id":"1","category_id":"3","name":"Test2"}},{"Attribute":{"id":"2","product_id":"1","category_id":"3","name":"Tes1"}}]"

Ce que j'obtiens

Lorsque j'essaye de debug avec alert(result); j'ai bien le contenu JSON mais lorsque j'essaye par exemple d'obtenir que le nom de cette facon:
result.Attribute.name

j'ai droit a un Attribute undefinide.

Je vous remercie d'avance pour votre aide.

6 réponses


ToToSe
Réponse acceptée

Yop,
Le json renvoyé par ton PHP est un tableau contenant plusieur element qui eux contiene l'attribut Attribute.
Si tu veux acceder au attributs Atribute il te faudra iterer sur ton json via une boucle for par example.

      for (var i = 0; i < result.length; i++) {
          console.log(result[i].Attribute);
      }

JSFiddle
Ce code affichera 1 par 1 tes attributs Attribut.

Salut, ton json est un tableau (Array), il y a plusieurs "Attribute".
Il est donc normal qu'un result.Attribute.name te renvoit un undefined; il te manque l'index.

donny
Auteur

Salut PhiSyX, c'est a dire il me manque l'index ? Je craint de ne pas avoir compris :/

Hello,

Dans un premier temps, formate ton JSON correctement. Cela te permettra de mieux voir ce qui t'es retourné :

[{
    "Attribute": {
        "id": "1",
        "product_id": "1",
        "category_id": "3",
        "name": "Test2"
    }
}, {
    "Attribute": {
        "id": "2",
        "product_id": "1",
        "category_id": "3",
        "name": "Tes1"
    }
}]

Tu vois que ton JSON contient plusieurs fois "Attribute", donc c'est un tableau.
Si tu fait :

console.log(result);

Tu auras le JSON.

Si tu fait :

console.log(result.Attribute);

Tu as quoi comme résultat ?
A mon avis ? undefined. Comme c'est un tableau, il n'existe pas result.Attribute. Par contre, result[0].Attribute doit exister !
Tu peux donc faire un foreach (ou un for) sur ton result, qui est un tableau, et a ce moment là, tu pourras accéder au propriétés !

donny
Auteur

Bonjour, merci pour vos reponses, j'ai fait la boucle, mais j'ai toujours le fameux "undefined"
Avez-vous une idee d'ou cela peu venir malgre la boucle?

EDIT: Probleme resolut :)

Encore merci !

Sélectionne la ou les réponses qui t'ont aidés afin de passer le sujet en résolu !