Muszę umieścić obiekt JSON w atrybucie elementu HTML.
Kod HTML nie musi sprawdzać poprawności.Odpowiedział Quentin: Przechowuj JSON w
data-*
atrybucie , który jest prawidłowym HTML5.Obiekt JSON może mieć dowolny rozmiar - tj. Ogromny
Odpowiedział Maiku Mori: Limit dla atrybutu HTML to potencjalnie 65536 znaków .
Co się stanie, jeśli JSON zawiera znaki specjalne? na przykład
{foo: '<"bar/>'}
Odpowiedział Quentin: Zakoduj ciąg JSON przed umieszczeniem go w atrybucie, zgodnie ze zwykłymi konwencjami. W przypadku PHP użyj funkcji .
htmlentities()
EDYCJA - Przykładowe rozwiązanie wykorzystujące PHP i jQuery
Zapisywanie JSON w atrybucie HTML:
<?php
$data = array(
'1' => 'test',
'foo' => '<"bar/>'
);
$json = json_encode($data);
?>
<a href="#" data-json="<?php echo htmlentities($json, ENT_QUOTES, 'UTF-8'); ?>">CLICK ME</a>
Pobieranie JSON za pomocą jQuery:
$('a').click(function() {
// Read the contents of the attribute (returns a string)
var data = $(this).data('json');
// Parse the string back into a proper JSON object
var json = $.parseJSON($(this).data('json'));
// Object now available
console.log(json.foo);
});
data-json
którego powinieneś użyć $(this).data('json')
, jQuery ma cię w tej części.