SOA, ненавязчивый JavaScript
Допустим, у меня есть спокойный веб-сервис, который может работать с DTO в формате json для выполнения операции CRUD.
Давайте также скажем, что я использую jquery ненавязчивым способом для сериализации моей формы на внешнем интерфейсе, используя:
JSON.stringify
Что я могу сделать, чтобы все работало, даже если JavaScript отключен?
Благодарю.
С наилучшими пожеланиями,
Кристиан
5 ответов
Я не вижу, как вы можете запустить jquery JavaScript, когда JavaScript отключен.
Можете ли вы иметь версию своего приложения, которая отправляет форму на сервер и выполняет сериализацию JSON на стороне сервера?
Вы не упоминаете, какие технологии вы используете на сервере, поэтому я постараюсь сделать этот сервер независимым.
Вы должны указать свое действие формы на другой URL, чем ваш веб-сервис (в rails это будет какое-то другое "действие контроллера").
<form id="input_form" action="your/non-SOA/action">
<input type="text" name="user" />
<input type="submit" value="Submit"/>
</form>
Где-то еще (вероятно, в js-файле, загруженном в заголовок html) у вас должен быть код javascript, который изменяет способ обработки события отправки "click":
$(function(){ // jQuery DOM ready function.
var form = $("#input_form");
var submit_button = $("#input_form .input[type=submit]");
submit_button.bind('click', function() {
// serialize form with JSON and send it here
});
});
Этот код будет выполняться только в том случае, если включен JavaScript. Если это не так, то форма будет отправлена your/non-SOA/action
через запрос POST, обычно в форме "ассоциативного хэша" для параметров действия. Таким образом, вы должны преобразовать этот хэш в структуру json на сервере и отправить его в соответствующий веб-сервис.
На вашем сервере это будет выглядеть так (псевдокод):
function your.non-SOA.action(params)
// you might need more treatment than just doing to_json, depending on your ws syntax
serialized_text = params['input_form'].to_json
myWebservice = Webservice.new('your-webservice-uri')
try
myWebservice.send(serialized_text)
catch(exception e)
// handle exceptions
end
end
Есть альтернативная версия, которая может быть грациозно ухудшена до. JSON не может быть обработан без JavaScript (JSON = JavaScript Object Notation)
Полагаю, это действительно зависит от того, на чем написан ваш серверный скрипт. Большинство языков веб-приложений имеют некоторую поддержку json. Поэтому, если вы хотите, чтобы данные формы находились в json даже после того, как они попадают на сервер, используйте все, что поддерживает ваш язык. В PHP вы можете сделать:
$form_data_json = json_encode($_POST);
Конечно, это предполагает, что вы хотите, чтобы все данные передавались из формы, а вы - нет. Но это простое однострочное решение.
Единственный способ убедиться, что он работает, даже с отключенным javascript, - опубликовать информацию без AJAX, а также проверить и преобразовать всю информацию на сервере. JQuery - это JavaScript, поэтому, если JS выключен на клиенте, он не будет работать. Большинство современных серверных языков могут работать с сериализацией / десериализацией JSON, и если нет, то обязательно найдутся библиотеки, которые сделают это для вашего языка.