Ho bisogno di inserire un oggetto JSON in un attributo su un elemento HTML.
L'HTML non deve essere convalidato.Risposta di Quentin: Memorizza il JSON in un
data-*
attributo , che è HTML5 valido.L'oggetto JSON potrebbe essere di qualsiasi dimensione, ovvero enorme
Risposta di Maiku Mori: Il limite per un attributo HTML è potenzialmente di 65536 caratteri .
Cosa succede se il JSON contiene caratteri speciali? per esempio
{foo: '<"bar/>'}
Risposta di Quentin: codifica la stringa JSON prima di inserirla nell'attributo, secondo le normali convenzioni. Per PHP, usa la funzione .
htmlentities()
EDIT - Soluzione di esempio che utilizza PHP e jQuery
Scrittura del JSON nell'attributo 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>
Recupero del JSON utilizzando 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
dovresti usare $(this).data('json')
, jQuery ti ha coperto da quella parte.