Как отправить HTML с дополнительными метаданными, чтобы JS (ajax) знал, что делать с ответом? - PullRequest
3 голосов
/ 03 сентября 2011

Я делаю запросы только с AJAX, большинство моих запросов возвращает html, который я загружаю в div # content (не только, скажем, самое распространенное действие). Проблема возникает, когда я должен отправить что-то вроде сообщения об ошибке, например, когда сеанс пользователя истек - тогда я должен «очистить рабочий стол пользователя» (заменить все тело, а не только #content). Функция загрузки Ajax, не знаю, что она получит, поэтому сервер должен отправить некоторую дополнительную информацию, что делать с его ответом.

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

Ответы [ 3 ]

3 голосов
/ 03 сентября 2011

Вы можете отправить обратно не просто HTML-фрагмент, чтобы вставить #content, но вместо этого вместо него выполнить фрагмент JavaScript, либо документ JSON с ключом, описывающим, как его интерпретировать.

1 голос
/ 03 сентября 2011

Если вы загружаете контент с возможностью добавления метаданных, вы, вероятно, захотите отправить обратно JSON. Хотя это выглядит небрежно, оно работает хорошо и намного проще извлекать данные.

{"body": "<h1>I'm a title!</h1>", "errors": []}

{"body": "<h3>Session Expired</h3>", "errors": ["sessionExpired"]}

Вы можете комбинировать это с кодами состояния HTTP, такими как «422», которые будут вызывать обратный вызов ошибки для дальнейшей настройки и специализации вашего кода.

Чтобы проверить, есть ли у вас ошибки без кодов состояния, все, что вам нужно сделать, это запросить response.errors.length и посмотреть, например, равно ли это 0 .. В этом случае вы знаете, что ошибок не было. В противном случае вы получите множество ошибок, которые могут возникнуть, и вы можете просмотреть их, чтобы решить эти проблемы. Чтобы получить тело, просто выполните $ (response.body) - теперь у вас есть кусок html с jquery-размером, который можно вставить куда угодно.

1 голос
/ 03 сентября 2011

Существует несколько возможностей:

  • Вы можете использовать теги <meta> html для описания проблем.

  • Вы также можете простоотправьте скрытую <div> или <span> или любую другую информацию и удалите ее из результата на принимающей стороне AJAX.

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