Как использовать Ajax в BSP?

До сих пор мне удалось заставить мою модель BSP MVC работать.

Вот мой код.

Посмотреть

<body>
    <z:form>
   <z:input binding="//c/counter"
            invisible="true"/>
    Counter : <z:write binding="//c/counter"/>
        
    <z:button fcode="incr"
                      text="Increase"/>
    <z:button fcode="decr"
                      text="decrease"/>
    </z:form>
  </body>

Controller
Через fcode я вызываю метод fcode_incr в Controller. 'c' — экземпляр модели zcl_counter. у него есть счетчик атрибутов, который будет увеличен этим методом.

method fcode_incr.
   c->increment( ).
endmethod.

Я надеюсь, что zcl_model очевиден и его код здесь не актуален.

Проблема, когда я нажимаю кнопку увеличения, сервер отправляет запрос. Когда он получает ответ, он обновляет страницу. Итак, я получаю увеличенное значение. как я могу заставить его работать с Ajax, чтобы страница оставалась без обновления?

Я уже пробовал Ajax с XML-страницей с потоком. как Eventhandler--›OnRequest

request->get_form_field('variable').

Помогает ли это дальше?

Правильный вызов Ajax будет

$.ajax({
        url:'ajaxController.do',
        statusCode:{
          404: function(){
            alert("not found");
          }
        },
        success: function(data){
          $('#viewData').html(data);
        }
       }).error(function(){
          alert("failed");
});

person kk-dev11    schedule 11.10.2012    source источник


Ответы (1)


Эта ссылка объясняет подробности: http://www.saptechnical.com/Tutorials/BSP/AJAX/create.htm

Но по существу;

  1. Интегрируйте некоторый javascript на свою страницу bsp, чтобы вы могли использовать ajax, вот несколько вариантов:

    • Either take the code from that link
    • Or the better the solution is to use jQuery, either through
      • Using <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/themes/base/jquery-ui.css" type="text/css" />
      • Или загрузив http://code.jquery.com/jquery-1.8.2.min.js и ссылаться на него в своем коде

    Затем вы можете вызывать вызовы ajax следующим образом с помощью jQuery: http://api.jquery.com/jQuery.ajax/

  2. Создайте контроллер в своем проекте BSP, который будет вызываться из AJAX.

  3. Создайте класс контроллера для своего контроллера, только переопределите REQUEST и поместите туда свою логику

Сделанный.

person tomdemuyt    schedule 11.10.2012
comment
У меня есть контроллер с именем ZKTH_BSP_AJAX. Как это вызвать из Ajax? xmlhttp.open(GET,контроллер ??, правда); этим способом? - person kk-dev11; 11.10.2012
comment
Имя контроллера — это имя, которое отображается в сети, я не уверен, что назвал бы его ZKTH_BSP_AJAX. В любом случае, вы бы назвали это с помощью xmlhttp.open(GET, ZKTH_BSP_AJAX, true); Хотя на самом деле я бы потратил время на изучение вызовов AJAX с библиотекой jQuery. - person tomdemuyt; 11.10.2012
comment
Я изучил вызовы Ajax в JQuery. Но я не уверен, как это реализовать. У меня есть метод в контроллере с именем fcode_save. Я должен вызвать этот метод, чтобы я мог поймать возвращаемое значение. $.ajax({url: controller, data: inputName etc..}) при чем здесь этот метод? - person kk-dev11; 12.10.2012
comment
Просто чтобы быть уверенным, является ли ваш класс контроллера производным от CL_BSP_CONTROLLER2? Это должно. После этого вам нужно получить переменные из http-запроса ( l_year = request->get_form_field( 'year' ). ), вызвать fcode_save, а затем вернуть вывод в http-запрос с помощью CALL METHOD response->append_cdata EXPORTING data = l_output.. - person tomdemuyt; 12.10.2012
comment
На самом деле он унаследовал CL_BSP_CONTROLLER. Итак, теперь я создал новый контроллер ZCL_CO_KTH_AJAX2, производный от CL_BSP_CONTROLLER2. Там у меня есть такие методы, как Do_init, do_request, do_handle_event и т. д. В каком методе я должен написать CALL METHOD response->append_cdata..? - person kk-dev11; 12.10.2012
comment
Я разместил свой код прямо внизу. Я получаю код состояния 404. Означает ли это, что он не может определить класс контроллера? - person kk-dev11; 12.10.2012
comment
Ах хорошо. Возможно, вы пропустили шаг 2. Создайте контроллер в своем проекте BSP, который будет вызываться из AJAX. Щелкните правой кнопкой мыши свое приложение BSP, создайте контроллер с именем, скажите «doSomething» и свяжите его с вашим классом ZCL_CO_KTH_AJAX2. С этого момента ajax должен ссылаться на doSomething, а не на ZCL_CO_KTH_AJAX2. Кроме того, метод do_request должен иметь response->append_cdata и request->get_form_field. - person tomdemuyt; 12.10.2012
comment
Замечательно. это сработало. Большое спасибо за Вашу помощь. Теперь я могу начать строить. :) - person kk-dev11; 12.10.2012