2013-08-29 6 views
42

Sto tentando di inviare una richiesta Get da ajax e di restituire i dati JSON restituiti dal server in html.Jquery - Uncaught TypeError: impossibile utilizzare l'operatore 'in' per cercare '324' in

Ma ho ricevuto questo errore.

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

Questo è il mio codice che invia una richiesta Get a file php da ajax. Quando uso il metodo $ .each, viene visualizzato l'errore che ho mostrato in precedenza.

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) 
      }) 
     } 
    ) 

}) 

Questo è il mio codice PHP che restituisce il risultato della query in formato json.

public function actionAjax(){ 

    $parentCatId=$_GET['parentCatId']; 

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

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

} 

dati json emessi da questo php è come questo.

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

Qualcuno sa come risolvere questo problema?

Please help me out. Grazie in anticipo :)

+1

Da dove viene quel messaggio di errore viene? – Mike

+1

puoi aggiungere un 'console.log (dati)' prima di 'each' stmt e vedere cosa viene stampato nella console –

+0

Grazie! il mio problema è stato risolto ora :) – Hayato

risposta

71

Hai una stringa JSON, non un oggetto. Dì a jQuery che ti aspetti una risposta JSON e la analizzerà per te. O utilizzare $.getJSON al posto di $.get, o passare l'argomento dataType a $.get:

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

Grazie mille! Funziona – Hayato

+2

@Hayato Prego! :) – Paulpro

+0

Grazie mille! – nekiala

6

Se stai recupero JSON, utilizzare $.getJSON() in modo che converte automaticamente il JSON a un oggetto JS.

+0

grazie mille! – Hayato

20

È inoltre possibile utilizzare $.parseJSON(data) per convertire in modo esplicito una stringa che proviene da uno script PHP in un vero array JSON.

3

ho fissato un errore simile aggiungendo il tipo di dati JSON in questo modo:

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

E nel mio controller ho dovuto usare le virgolette intorno a tutte le stringhe in questo modo (nota: devono essere sfuggito in 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; 
} 

Quindi, si potrebbe provare a utilizzare le virgolette intorno ai vostri numeri, se sono utilizzati come stringhe (e rimuovere tale ultima virgola):

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

Usa getJSON

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

Particolare guarda qui http://api.jquery.com/jQuery.getJSON/

+1

Questa risposta è già stata data. –

Problemi correlati