2013-10-19 3 views
5

Kiedy nazywają ten kod:nie można uzyskać dostępu do właściwości obiektów w jQuery AJAX wywołania

console.log(data); 
console.log(data.email); 

uzyskać ten wynik:

{"userName":"2","email":"2","firstName":"2","lastName":"2","isAdmin":"0","isEnabled":"1"} index.php:162 
undefined 

Pierwsze console.log(data); wyjść poprawnie. Następnie chcę uzyskać dostęp do właściwości email obiektu data, a do tego używam console.log(data.email);. Jednak, jak widać powyżej, jest napisane, że jest "nieokreślony".

Dlaczego nie mogę uzyskać dostępu do tej właściwości (lub jakichkolwiek właściwości)? Uwaga: Próbowałem też data['email'], który również nie działał.

Odpowiedz

4

Nie zdawałem sobie sprawy, że jQuery nie analizuje automatycznie zwróconego pliku JSON do obiektu. To był tylko ciąg JSON. Aby rozwiązać, po prostu musiałem to zrobić:

data = JSON.parse(data); 

Cross-browser:

data = $.parseJSON(data); 
+2

Można to również naprawić, informując jquery, że serwer jest zwracając JSON. 'dataType:" json "' lub ustawienie typu zawartości odpowiedzi serwera na '" application/json "' –

+0

Dzięki, pomyślałem, że to "contentType", więc nie działało! Bardziej podoba mi się twoje rozwiązanie. – user1477388

+2

Powinieneś użyć '$ .parseJSON' zamiast' JSON.parse() ', ponieważ jquery obsługuje je w trybie różnych przeglądarek. – Yang

0

W moim przypadku, mogę pokazać obiektu poprzez console.log, ale nie może uzyskać dostępu do żadnego atrybutu na prostą rzecz: nie zdawałem sobie sprawy, że mój JSON był źle skonstruowany, jako tablica z jednym obiektem. Następnie mogłem uzyskać dostęp do jego atrybutu za pomocą indeksu.

console.log(data.email);

undefined

ale potem próbowałem ...

console.log(data[0].email);

[email protected]

Właśnie stałe mojego modelu i działa idealnie. Dzięki mojemu koledze Aaronowi Lil!

0

Doświadczyłem tego samego problemu. Aby to naprawić, musiałem utworzyć nową tablicę, a następnie umieścić każdą wartość obiektu danych w tej macierzy przez iterowanie "danych" takich jak:

var arrayTest = []; 

$.each(data, function (index, value) { 
    arrayTest["email"] = value.email; 
    arrayTest["andsoforth"] = value.andsoforth; 
    //etc... 
}); 

// Now retrieve data by using arrayTest 
console.log(arrayTest["email"]); 
Powiązane problemy