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, и если нет, то обязательно найдутся библиотеки, которые сделают это для вашего языка.

Другие вопросы по тегам