2015-05-11 3 views
0

У меня есть этот HTML ящик:Невозможно разобрать JSON в объект Javascript

<span>Select depatament</span><span> 
    <select id="department" onchange="EnableSlaveSelectBox(this)" data-slaveelaments='{"a": 1, "b": "2"}'> 
     <option selected disabled>-Select-</option> 
    </select> 
</span> 

событие OnChange() реализации:

function EnableSlaveSelectBox(element) { 
    var d = $('#department').data('slaveelaments'); 
    alert($.parseJSON(d)); 
} 

Но когда OnChange() событие вызывается я получаю на этой строке :

alert($.parseJSON(d)); 

Эта ошибка:

SyntaxError: JSON.parse: неожиданный символ в строке 1 столбец 2 данных JSON return JSON.parse (data + "");

Любая идея, почему я получаю ошибку выше? Спасибо заранее.

ответ

1

В вашем случае вам не нужно использовать parseJSON, потому что d является Object,

function EnableSlaveSelectBox(element) { 
    var d = $('#department').data('slaveelaments'); 

    console.log(d.a); 
    console.log(d.b); 
} 

Example

When the data attribute is an object (starts with '{') or array (starts with '[') then jQuery.parseJSON is used to parse the string; it must follow valid JSON syntax including quoted property names. If the value isn't parseable as a JavaScript value, it is left as a string.

$.data

3

Потому что, интересно, JQuery, кажется, автоматически разбора string к объекту. Чтобы проверить это:

alert(d); // [object Object] 

Или сделать это, чтобы увидеть строковую версию снова:

alert(JSON.stringify(d)); // {"a":1,"b":"2"} 

стороны: я не знаю, JQuery сделал это, пока я не проверял.

+0

Я как раз собирался опубликовать то же самое. , , Ты узнаешь что-то новое каждый день. :) Хорошая функция jQuery ребята! – talemyn

2

Данные jQuery() уже будут правильно преобразовывать json в массив или объект.

Это, как описано в апи

When the data attribute is an object (starts with '{') or array (starts with '[') then jQuery.parseJSON is used to parse the string; it must follow valid JSON syntax including quoted property names. If the value isn't parseable as a JavaScript value, it is left as a string.

data() API DOCS

Смежные вопросы