2015-11-08 85 views
4

當試圖從HTML數據屬性解析JSON時出現錯誤。這是div我想從解析JSON:jQuery的parseJSON從HTML不起作用

echo '<div class="udropdown" data-elements=\'{"option1" : "1", "option2" : "2" }\'></div>'; 

,這是jQuery的部分(這是上點擊,所以$(this)是必要的)

var ele = jQuery.parseJSON($(this).data('elements')); 

,但我不斷收到此錯誤:

Uncaught SyntaxError: Unexpected token o

+0

應該不需要使用'parseJSON()''以來data()'會在內部進行解析 – charlietfl

+0

但是無論哪種方式,如果你要返回HTML,爲什麼不能返回已有的選項呢?擁有帶JSON的數據屬性有什麼意義? –

+0

@AndréSilva很多可能的用例,例如初始化一個插件 – charlietfl

回答

3

the documentation for jQuery.data

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.

$(this).data('elements')將字符串中已經解析的JSON的對象。

jQuery.parseJSON(object)相當於jQuery.parseJSON(object.toString())它給你jQuery.parseJSON("[object Object")

只需跳過手冊parseJSON步驟。 jQuery已經爲你做到了。

1

很可能你已經有一個解析對象。在這種情況下parseJSON試圖把你輸入的字符串,只要它已經將被視爲下面的字符串對象:

[object Object] 

或相似。它認爲那個符號[是某個數組的開始(它仍然是一個有效的JSON),而o正是它不期望得到的,因爲它必須是數字,布爾值或其中一個符號',"{

只需檢查數據類型$(this).data('elements') - 它必須是一個對象。

嘗試以下操作:

JSON.parse({}) 

,將返回完全相同的錯誤。

1

$(this).data('elements')返回一個對象,這樣你就不必解析那些僅僅使用ele返回,如:

$('.udropdown').click(function(){ 
 
    var ele = $(this).data('elements'); 
 
    console.log(ele.option1, ele.option2); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="udropdown" data-elements='{"option1" : "1", "option2" : "2" }'>Click HERE</div>