SOA, ненавязчивый JavaScript - PullRequest
       15

SOA, ненавязчивый JavaScript

0 голосов
/ 09 марта 2010

Допустим, у меня есть спокойный веб-сервис, который может работать с DTO в формате json для выполнения операции CRUD.

Давайте также скажем, что я использую jquery ненавязчивым способом для сериализации своей формы на внешнем интерфейсе, используя:

JSON.stringify

Что я могу сделать, чтобы все работало, даже если JavaScript отключен?

Спасибо.

С наилучшими пожеланиями,

Christian

Ответы [ 5 ]

1 голос
/ 09 марта 2010

Я не вижу, как вы можете запустить jquery JavaScript, когда JavaScript отключен.

Можете ли вы иметь версию своего приложения, которая отправляет форму на сервер и выполнять сериализацию JSON на стороне сервера?

0 голосов
/ 09 марта 2010

Вы не упоминаете, какие технологии вы используете на сервере, поэтому я постараюсь сделать этот сервер независимым.

Вы должны указать действие формы для другого 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 "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
0 голосов
/ 09 марта 2010

Единственный способ убедиться, что он работает, даже с отключенным javascript, - опубликовать информацию без AJAX, а также проверить и преобразовать всю информацию на сервере. JQuery - это JavaScript, поэтому, если JS выключен на клиенте, он не будет работать. Большинство современных серверных языков могут работать с сериализацией / десериализацией JSON, и если нет, то обязательно найдутся библиотеки, которые сделают это для вашего языка.

0 голосов
/ 09 марта 2010

Это действительно зависит от того, на чем написан ваш серверный скрипт, я полагаю. Большинство языков веб-приложений имеют некоторую поддержку json. Поэтому, если вы хотите, чтобы данные вашей формы были в json даже после того, как они попадут на сервер, используйте все, что поддерживает ваш язык. В PHP вы можете сделать:

$form_data_json = json_encode($_POST);

Конечно, это предполагает, что вы хотите, чтобы все данные передавались из формы, чего вы не можете. Но это простое однострочное решение.

0 голосов
/ 09 марта 2010

Есть альтернативная версия, которая может быть грациозно ухудшена до. JSON не может быть обработан без JavaScript (JSON = JavaScript Object Notation)

...