Для ясности нужно продумать и представить всю цепочку хода запросов и ответов.
Цепочка запроса и ответа |
Решение задачи схематично представлено на рисунке. Ддя клиентской строны имеем - index.html или index.php, для серверной - скрипт json.php. Рассмотрим подробнее:
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; Charset=UTF-8">
<script src="jquery-1.9.1.js"></script>
<script>
$(document).ready(function(){
$('#btn').click(function(){
// При нажатии кнопочки запрашиваются данные
// с сервера (скрипт - json.php), при успешном ответе
// вызывается callback функция function(data)
// с входными данными data
$.getJSON('json.php', function(data) {
// Разбивка входных данных на пару 'ключ=>значение'
// (соответствующая структура json-данных)
$.each(data, function(key, value) {
// При отладке удобно пользоваться методом alert(),
// можно отслеживать содержимое входных данных
// alert("value.id = " + value.id +
// " value.date = " + value.date +
// " value.staff = " + value.staff +
// " value.otdel = " + value.otdel);
// Разбираем полученные данные и формируем
// для html-представления строку (для отображения табличных данных)
var table_row = "<tr>" +
"<td>" + value.id + "</td>" +
"<td>" + value.date + "</td>" +
"<td>" + value.staff + "</td>" +
"<td>" + value.otdel + "</td>" +
"</tr>";
// Добавляем сформированную строку table_row в таблицу
// с идентификатором table_content
$(table_row).appendTo("#table_content tbody");
});
});
});
});
</script>
<style>
#table_content
{
background-color:#00CCFF;
color:#000000;
}
</style>
</head>
<body>
<p>Test page for testing get JSON data from server:</p>
<form>
<input id="btn" type="button" value="Click me to get json-data">
</form>
<!-- В данной таблице будут отображены полученные данные -->
<table id="table_content" border="1">
<thead>
<th>id</th>
<th>date</th>
<th>staff</th>
<th>otdel</th>
</thead>
<tbody>
</tbody>
</table>
</body>
</html>
До нажатия кнопочки таблица (немного не соответствует) пуста |
После нажатия заполняется содержимое таблицы |
Как видно, на стороне клиента используется js-библиотека jquery. Логика такая. При нажатии кнопочки будет вызван специальный метод $.getJSON('json.php', function(data) {}), который запрашивает данные с сервера (обращение к скриптовой части - json.php), если все хорошо, мы получаем входные данные data, которые далее поступают на вход callback-функции, где непосредственно идет разбор данных и подготовка к последующему html-отображению. В нашем случае - табличное представление. В принципе, здесь ничего сложного.
Теперь рассмотрим скриптовую часть:
json.php
<?#Взаимодействие с клиентом в json-формате
// Параметры (тестовые), необходимые для коннекта к базе данных db_name
$server = "localhost";
$username = "root";
$password = "password";
// Тестовое имя базы данных
$dbname = "db_name";
// sql-запрос. Возвращает данные двух работников из одного отдела
$sql = "SELECT DISTINCT a.id, a.date, a.staff, a.otdel
FROM db_name.tbl_name a, db_name.tbl_name b
WHERE a.otdel = b.otdel AND a.id <> b.id
ORDER BY a.otdel ASC
LIMIT 2";
// Параметры (тестовые), необходимые для коннекта к базе данных db_name
$server = "localhost";
$username = "root";
$password = "password";
// Тестовое имя базы данных
$dbname = "db_name";
// sql-запрос. Возвращает данные двух работников из одного отдела
$sql = "SELECT DISTINCT a.id, a.date, a.staff, a.otdel
FROM db_name.tbl_name a, db_name.tbl_name b
WHERE a.otdel = b.otdel AND a.id <> b.id
ORDER BY a.otdel ASC
LIMIT 2";
// Подключение к серверу...
mysql_connect($server, $username, $password) or
die("Connect error: ".mysql_error());
// Подключение к базе данных db_name...
mysql_select_db($dbname);
// Делаем sql-запрос к базе данных и получаем результат...
$result = mysql_query($sql);
mysql_connect($server, $username, $password) or
die("Connect error: ".mysql_error());
// Подключение к базе данных db_name...
mysql_select_db($dbname);
// Делаем sql-запрос к базе данных и получаем результат...
$result = mysql_query($sql);
// Если запрос отработал и мы получили результат,
// тогда представим сие результат в виде
// ассоциативного массива $row, с последующей
// подготовкой для отправки в json-формате
if ($result)
while($row = mysql_fetch_assoc($result))
$json[] = array('id'=>$row['id'], 'date'=>$row['date'], 'staff'=>$row['staff'], 'otdel'=>$row['otdel']);
else
die();
// Отправляем подготовленный массив $json (в ответ)
header("Content-type: application/json");
echo json_encode($json);
?>
// тогда представим сие результат в виде
// ассоциативного массива $row, с последующей
// подготовкой для отправки в json-формате
if ($result)
while($row = mysql_fetch_assoc($result))
$json[] = array('id'=>$row['id'], 'date'=>$row['date'], 'staff'=>$row['staff'], 'otdel'=>$row['otdel']);
else
die();
// Отправляем подготовленный массив $json (в ответ)
header("Content-type: application/json");
echo json_encode($json);
?>
Конечно, здесь все упрощено, самое главное на что нужно обратить внимание - вид массива $json, который готов к преобразованию в json-формат и отправке клиенту. Выглядит он следующим образом:
$json = array [
0 => array [
"id" => "16",
"date" => "11032013",
"staff" => "developer",
"otdel" => "it"
],
1 => array [
"id" => "61",
"date" => "11032013",
"staff" => "tester",
"otdel" => "it"
]
]
После обработки методом json_encode() получим следующее (json-данные):
[{
"id":"16",
"date":"11032013",
"staff":"developer",
"otdel":"it"
}, {
"id":"61",
"date":"11032013",
"staff":"tester",
"otdel":"it"
}]
Далее отправляем данные клиенту, не забывая указывать тип содержимого ответа header("Content-type: application/json").
Если нужны исходники, то можно скачать по ссылке - download.
Всем удачи.