web-dev-qa-db-fra.com

Jquery - Uncaught TypeError: impossible d'utiliser l'opérateur 'in' pour rechercher '324' dans

J'essaie d'envoyer une demande Get par ajax et de générer des données JSON renvoyées par le serveur au format HTML.

Mais j'ai cette erreur.

Uncaught TypeError: Cannot use 'in' operator to search for '324' in 
[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]

Ceci est mon code qui envoie une demande Get au fichier php par ajax . Lorsque j'utilise la méthode $ .each, il obtient l'erreur que j'ai affichée plus haut.

parentCat.on('change', function(e){
    parentCatId = $(this).val();

    $.get(
        'index.php?r=admin/post/ajax',
        {"parentCatId":parentCatId},
        function(data){                     
            $.each(data, function(key, value){
                console.log(key + ":" + value)
            })
        }
    )

})

C'est mon code PHP qui renvoie le résultat de la requête au format json.

public function actionAjax(){

    $parentCatId=$_GET['parentCatId'];

        $catData = Category::getTargetCategoryData($parentCatId);

        echo CJSON::encode($catData);
        Yii::app()->end();

}

json données en sortie de ce php est comme ça.

[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}]

Quelqu'un sait comment résoudre ce problème?

S'il vous plaît aidez-moi .. Merci d'avance :)

42
Hayato

Vous avez une chaîne JSON, pas un objet. Indiquez à jQuery que vous attendez une réponse JSON et il l'analysera pour vous. Utilisez soit $ .getJSON au lieu de $ .get , ou passez l’argument dataType à $.get:

$.get(
    'index.php?r=admin/post/ajax',
    {"parentCatId":parentCatId},
    function(data){                     
        $.each(data, function(key, value){
            console.log(key + ":" + value)
        })
    },
    'json'
);
72
Paulpro

Vous pouvez également utiliser $.parseJSON(data) pour convertir explicitement une chaîne issue d'un script PHP en un tableau JSON réel.

21
HansH

Si vous récupérez du JSON, utilisez $ .getJSON () pour le convertir automatiquement en objet JS.

6
doobdargent

J'ai corrigé une erreur similaire en ajoutant le type de données json comme suit:

$.ajax({
    type: "POST",
    url: "someUrl",
    dataType: "json",
    data: {
        varname1 : "varvalue1",
        varname2 : "varvalue2"
    },
    success: function (data) {
        $.each(data, function (varname, varvalue){
            ...
        });  
    }
});

Et dans mon contrôleur, je devais utiliser des guillemets doubles autour de chaînes telles que (remarque: elles doivent être échappées en Java):

@RequestMapping(value = "/someUrl", method=RequestMethod.POST)
@ResponseBody
public String getJsonData(@RequestBody String parameters) {
    // parameters = varname1=varvalue1&varname2=varvalue2
    String exampleData = "{\"somename1\":\"somevalue1\",\"somename2\":\"somevalue2\"}";
    return exampleData;
}

Vous pouvez donc essayer d'utiliser des guillemets autour de vos nombres s'ils sont utilisés comme des chaînes (et supprimer cette dernière virgule):

[{"id":"50","name":"SEO"},{"id":"22","name":"LPO"}]
3
LeHill

Utilisez getJSON

$.getJSON(
'index.php?r=admin/post/ajax',
{"parentCatId":parentCatId},
function(data){                     
    $.each(data, function(key, value){
        console.log(key + ":" + value)
    })
});

Détails chercher ici http://api.jquery.com/jQuery.getJSON/

0
TNS MUMET