Универсальный набор JSON функций
Вам нужна только ajax( $data ) и ajaxencode($data);
1) AJAX. Самое обычное применение:
используется http://code.google.com/p/transajax
<?php
$users_array = array("Sergey", "Andrey", "Irina");
if ( isset($_GET['is_ajax'])) ajax( $users_array );
?>
...ну и где-то в коде страницы
<script>
function get_users() {
ajax("?is_ajax=true", _get_users);
}
function _get_users( r ) {
alert( r[0] );
}
</script>
2) PHP to JavaScript encoding. Кодирование PHP типов данных в JavaScript
* Ассоциативные массивы представляются как объекты JS
<?php
$users_array = array("Sergey", "Andrey", "Irina");
?>
<script>
var users = <?php echo ajaxencode( $users_array); ?>";
alert(users[0]);
</script>
Ну а вот собственно сами функции
// AJAX output by Sergey Shuchkin, sibvision.ru
function ajax($data, $die = true) {
if (is_array($data) || is_object($data)) {
$data = ajaxencode($data);
}
header('Content-Type: text/html; charset=utf-8');
if ($die) die($data) else return $data;
}
function ajaxencode($data) {
if (is_object($data)) $data = get_object_vars($data);
$out = array();
$keys = array();
if (is_array($data)) $keys = array_keys($data);
$numeric = true;
if (!empty($keys)) $numeric = (array_values($keys) === array_keys(array_values($keys)));
foreach ($data as $key => $val) {
if (is_array($val) || is_object($val)) {
$val = ajaxencode($val);
} else {
if (is_numeric($val)) {
$val = $val;
} elseif (is_bool($val)) {
$val = ($val) ? 'true' : 'false';
} elseif (is_null($val)) {
$val = 'null';
} else {
$val = '"' . ajaxescape($val) . '"';
}
}
if (!$numeric) {
$val = '"' . $key . '"' . ':' . $val;
}
$out[] = $val;
}
if (!$numeric) {
$rt = '{' . join(', ', $out) . '}';
} else {
$rt = '[' . join(', ', $out) . ']';
}
return $rt;
}
function ajaxescape($string) {
// Escape these characters with a backslash:
// " \ / \n \r \t \b \f
$search = array('\\', "\n", "\t", "\r", "\b", "\f", '"');
$replace = array('\\\\', '\\n', '\\t', '\\r', '\\b', '\\f', '\"');
$string = str_replace($search, $replace, $string);
// Escape certain ASCII characters:
// 0x08 => \b
// 0x0c => \f
$string = str_replace(array(chr(0x08), chr(0x0C)), array('\b', '\f'), $string);
return $string;
}
- Как красиво передать массив PHP в JS. JSON
( Оставить комментарий )
