it-swarm.com.de

Jquery - Nicht gefundener TypeError: Der Operator 'in' kann nicht zur Suche nach '324' in verwendet werden

Ich versuche, eine Get-Anfrage von Ajax zu senden und Json-Daten auszugeben, die vom Server in HTML zurückgegeben werden.

Aber ich habe diesen Fehler bekommen.

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

Dies ist mein Code, der eine Get-Anforderung an eine PHP-Datei von ajax ..__ sendet. Wenn ich die Methode $ .each verwende, wird der Fehler angezeigt, den ich oben gezeigt habe.

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

})

Dies ist mein PHP Code, der das Abfrageergebnis im Json-Format zurückgibt.

public function actionAjax(){

    $parentCatId=$_GET['parentCatId'];

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

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

}

json-Daten, die von diesem PHP ausgegeben werden, sind so.

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

Weiß jemand, wie man dieses Problem beheben kann?

Bitte hilf mir raus . Danke schonmal :)

42
Hayato

Sie haben eine JSON-Zeichenfolge, kein Objekt. Sagen Sie jQuery, dass Sie eine JSON-Antwort erwarten und diese wird für Sie analysiert. Verwenden Sie entweder $ .getJSON anstelle von $ .get , oder übergeben Sie das dataType-Argument an $.get:

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

Sie können auch $.parseJSON(data) verwenden, das explizit eine Zeichenfolge konvertiert, die aus einem PHP -Skript in ein echtes JSON-Array stammt.

21
HansH

Wenn Sie JSON abrufen, verwenden Sie $ .getJSON () , damit JSON automatisch in ein JS-Objekt konvertiert wird.

6
doobdargent

Ein ähnlicher Fehler wurde behoben, indem der Json-Datentyp wie folgt hinzugefügt wurde:

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

Und in meinem Controller musste ich doppelte Anführungszeichen für alle Strings verwenden (Anmerkung: Sie müssen in Java mit Escapezeichen versehen werden)

@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;
}

Sie können also versuchen, Ihre Zahlen in Anführungszeichen zu setzen, wenn diese als Zeichenfolgen verwendet werden (und das letzte Komma entfernen):

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

Verwenden Sie getJSON

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

Detailansicht hier http://api.jquery.com/jQuery.getJSON/

0
TNS MUMET