Ненавязчивый JS, или «прогрессивное улучшение» - это путь.
Шаг 1:
Сначала создайте свою страницу, чтобы работать без JavaScript.Допустим, у вас есть простое приложение, в котором пользователь выбирает что-то и нажимает кнопку «Отправить».В зависимости от выбора, вы либо отобразите полезное сообщение об ошибке над формой, либо обновите страницу с правильным выводом и скроете (или избавитесь) форму.Создайте эту страницу, как для AJAX, но пока ничего не пишите.
Вот ваша страница:
<html>
<head>
<style type="text/css">
p#feedback { display:none;}
</style>
</head>
<body>
<div id="feedback"></div>
<div id="form">
<form action="getaction.php" method="post" id="actionform">
<select name="requestedAction">
<option value="foo">Do Foo</option>
<option value="bar">Do Bar</option>
</select>
<input type="submit">
</form>
</div>
</body>
</html>
При успешной отправке.сервер получит запрос с одним значением $_POST
: requestedAction=foo
(или bar
).Исходя из этого, ваш серверный скрипт создаст новую страницу со всем от <html>
до </html>
.
На данный момент у вас есть страница, которая работает в любом браузере без поддержки JS.Старомодно.Очень надежный.
Шаг 2
Добавьте сценарии для переопределения поведения по умолчанию submit
.Соберите нужные данные со страницы и создайте представление AJAX.Единственная разница между этим и представленной выше информацией заключается в том, что вы добавите флаг, сообщающий серверу, что запрос поступает через AJAX, и отправляете обратно только необходимое сообщение (вы также можете отправить его в другой скрипт).Сценарий сервера будет в основном проходить по той же логике, что и выше, но вместо построения всей страницы он просто отправляет обратно строку сообщения и оставляет ее AJAX, чтобы поместить эти данные в нужное место.Ваш ответ может быть просто фрагментом текста, блоком HTML или структурой данных XML.Это зависит от ваших потребностей.
<script type="text/javascript">
$(enhance); // at onDOMReady, run the enhance function
function enhance() {
// Override the default form submission behavior:
$('form#actionform').bind('submit',doSubmit);
};
function doSubmit(event) {
$.ajax(
{
type:'POST',
url:'/path/to/getaction.php',
data:'request=' + $('form#actionform select[name=requestedAction]').val() + '&type=ajax',
success:fnCallback
}
);
// Kill the submit action so the user doesn't leave the page
event.preventDefault();
};
function fnCallback(xhr) {
var strResponse = xhr.responseText;
if (strResponse === "error") {
$('div#feedback').text("There was an error. Please try again.");
}
else {
$('div#feedback').text(strResponse);
$('div#form').hide();
}
};
</script>
В этом случае отправка AJAX будет идентифицироваться на сервере, поскольку есть второй POST
параметр type=ajax
.
Сайт, который делает это действительно невероятно хорошов очень большом масштабе это ESPN.Выключите JS и посмотрите заголовки их главных историй под общей картиной.Поведение идентично их странице с поддержкой AJAX, и, кроме того, что видео не работает, вы действительно никогда не узнаете, был ли ваш JS включен или выключен.По сути, нет способа создать подобный сайт, не начав с тупого HTML и не создавая его.