Почему не парсится ajax-ответ?

397
11 ноября 2017, 14:49

Помогите пожалуйста понять почему такой скрипт выводит результат в консоль:

function getData() {
    $.get( "http://api.vk.com/method/database.getCountries?v=5.5", function( data ) {
        var resp = JSON.stringify(data['response']['items']);
      console.log( JSON.parse(resp) );
    }); 
};
getData();

, а такой скрипт нет:

function getData() {
    $.get( "http://api.vk.com/method/database.getCountries?v=5.5", function( data ) {
        var resp = JSON.parse(data['response']['items']);
      console.log( resp );
    }); 
};
getData();

Текст ошибки в консоли:

Uncaught SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse ()

Answer 1

Параметр data, который вы получаете в случае успешного выполнения запроса, уже содержит корректный объект. Это не строка, ее не надо парсить дополнительно. Ответ на запрос, как вы можете увидеть в инструментах разработчика, приходит с установленными заголовками

content-type    application/json; charset=utf-8

и этого достаточно что бы jquery автоматически определила тип контента и применила к нему JSON.parse прежде чем эти данные поступили в ваш обработчик.

Поэтому повторный вызов излишен, и приводит, как видите к ошибке. Объект с помощью toString() приводится в строковый вид, получая сроку [object Object], отсюда и o в позиции 1.

READ ALSO
js. Поиск элементов по name

js. Поиск элементов по name

Есть обычная html форма, типа

337
Сложный слайдер slick

Сложный слайдер slick

Есть задание сделать слайдерВот такого типа

312
JSON: Error: Unexpected EOF и Error: Invalid or unexpected token

JSON: Error: Unexpected EOF и Error: Invalid or unexpected token

У меня имеется старый самопис движок (2009-11 года)

634