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 :)
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'
);
Vous pouvez également utiliser $.parseJSON(data)
pour convertir explicitement une chaîne issue d'un script PHP en un tableau JSON réel.
Si vous récupérez du JSON, utilisez $ .getJSON () pour le convertir automatiquement en objet JS.
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"}]
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/