Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Загрузка страницы с помощью jquery ajax

Автор вопроса: JProgrammerОтветов: 3

Я хочу загрузить часть страницы с помощью JQuery ajax.

url - это запрос действия Struts2.

$("#accountListDiv").html(ajax_load).load(url, $("#testform").serializeArray(),   function(){
    //alert('done');
});

//serializeArray и сериализация не работают. (Возможно, действие struts действительно ожидает данные в том формате, в котором они генерируются этими функциями. Будет полезно получить больше информации по этому вопросу).

В случае обычного HTTP-запроса всем переменным в действии Struts2 будут автоматически присвоены значения, введенные на странице JSP.

Я хочу сделать то же самое при использовании Ajax. Я не хочу явно передавать каждый параметр в такой форме.

$("#indexDiv").html(ajax_load).load(url, "rateTypeId4Index="+rateTypeId4Index, function(){
    xyz();
});

Я знаю, что для struts есть плагин Dojo, но он устарел. И если я смогу решить эту проблему с помощью JQuery, то мне этого более чем достаточно.

(Я ищу решение, которое не требует использования плагина JQuery-struts).

jquerystruts2

Ответы

Ответ 1 · Vasily Komarov

1 У вас проблема с отправкой запроса, а не в части Struts2. Попробуйте установить карту параметров вместо строки.

$("#accountListDiv").html(ajax_load).load(url, {'param1':value1, 'param2':value2},   function(){
    //alert('done');
});

2 Если вы хотите отправить форму с помощью ajax, используйте плагин Jquery Form.

  $("#testform").ajaxSubmit({
      type: "POST",
      success: function(data) {
        $('#accountListDiv').html(data);
        alert('Yeh-ha!');
      },
      error: function(request, textStatus, errorThrown) {
        alert('Oops');
      }}
  );

Ответ 2 · рейтинг 1 · Explosion Pills

Я полагаю, вы имеете в виду использовать serialize, а не serializeArray

Ответ 3 · rees

Я использовал следующее с JQuery и Struts2:

<script>

    function bindDivFormSubmission(theDiv) {

        /* get the form from the div and unbind it */
        var theForm = theDiv.find('form');
        theForm.unbind();

         /* attach a submit handler to the form */
        theForm.submit(function(event) {

            /* stop form from submitting normally */
            event.preventDefault();

            var url = theForm.attr( 'action' ),
                formData = theForm.serialize();

            /* Send the data using post and put the results in a div */
            $.post( url, formData,
              function( data ) {
                  theDiv.html( data );
                  bindDivFormSubmission(theDiv);
              }
            );

        });

    }

    var accountListDiv = $("#accountListDiv");

    bindDivFormSubmission(accountListDiv);

</script>

Вы можете заметить, что он рекурсивно вызывает "bindDivFormSubmission(theDiv);" после замены div. Это произошло потому, что в моем использовании div заменяется другой формой, которую необходимо связать.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы