Вернуть JSON и HTML в вызове AJAX - PullRequest
2 голосов
/ 11 августа 2010

У меня есть несколько страниц с интенсивным использованием JavaScript (например, сортировка и фильтрация набора данных).

Обычно используется для отображения списка сложных элементов (обычно отображается как <li> с небольшим количеством HTML внутри): пользователь может удалять, редактировать или добавлять элементы с определенными формами. Поскольку элементы являются сложными, я сохраняю массив объектов javascript для выполнения каких-либо операций, таких как проверка ввода пользователя перед выполнением каких-либо действий.

Действие пользователя и детали отправляются на сервер через асинхронные вызовы: после получения результата мне нужно обновить как HTML, так и массив javascript.

Я использую этот хак: сервер возвращает структуру данных в кодировке json и обновленный HTML в виде одной строки. По прибытии данных некоторый код javascript разбивает ответ и анализирует первый фрагмент как json (обновление массива) и помещает второй фрагмент во внутренний html контейнера, заменяя предыдущее содержимое.

Я не хочу генерировать HTML из структуры данных, поскольку это не приложение для одного человека, и веб-дизайнеры довольно часто (и независимо) изменяют макет HTML. Также я не хочу воссоздавать структуру данных из HTML (слишком сложную и подверженную ошибкам).

Эта система работает довольно хорошо, имеет некоторые проблемы только с большим контентом, кросс-браузер (построен на jQuery) и, похоже, не имеет проблем с производительностью.

Вопрос в том, упускаю ли я что-то тонкое (или, может быть, очевидное), которое делает это решение плохим? Существует ли более простое и лучшее решение?

Кстати, на сервере работает PHP.

Спасибо.

Ответы [ 2 ]

7 голосов
/ 11 августа 2010

Почему бы вам не вернуть строку HTML как часть JSON? Таким образом, ваш вывод будет чище.

6 голосов
/ 11 августа 2010

Итак, предположительно, у вас есть две переменные: строка HTML ($html_string) и массив данных PHP, который будет отправляться в формате JSON ($array_of_info).Затем:

$a = array(
  'html' => $html_string,
  'json' => $array_of_info
);
header('Content-Type: application/json');
echo json_encode($a);

Вывод этого немного длиннее, чем при простом объединении строк HTML и JSON, но анализ на стороне клиента должен быть проще.И, вероятно, быстрее.И, как указано в комментариях, менее подвержен ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...