Хобрук: Ваш путь к мастерству в программировании

Как отправить данные JSON через POST (Ajax) и получить ответ JSON от действия Struts 2

Я пытаюсь понять, как использовать JSON, и в процессе я пытаюсь получить ответ JSON от действия Struts2 и отобразить предупреждение для ответа. Для этого я использую Ajax POST в JavaScript следующим образом:

function checkButtonClick(id){  

        var btnSave = 'saveAttendees';  
            var atNameList = $('#attName'+id).val();
            var ptNameList = $('#postName'+id).val();
            var aId = $('#at_id'+id).val();
            
            alert("here");
            var arr = {buttonName:  btnSave,
                    attendeesNameList: atNameList,
                    attendeesPostList: ptNameList,              
                    hidden_At_id: aId
                    };
            $.ajax({                            
                data: arr,
                type: 'POST',
                dataType: 'json',               
                url:"meeting_record_form",
                
                success:function(result){
                    alert(result.myMsg);
              },
                error:function(result){
                    alert("error");
              }
            });
}

Мой класс Action содержит поле String, которое я пытаюсь отобразить в предупреждении как ответ JSON. Но я нахожу проблему в этом. Что я упускаю или делаю неправильно?

Мой класс действий выглядит следующим образом:

private String myMsg;

    public String getMyMsg() {
        return myMsg;
    }

    public void setMyMsg(String myMsg) {
        this.myMsg = myMsg;
    }

private String updateAttendeesRecord() {
        
        
        meetingRecordService.updateAttendeesRecord(attendeesListMethod(), meeting_record);
        setMyMsg("Update Successful!");
            return SUCCESS;
    }

struts.xml файл:

 <package name="default" extends="struts-default, json-default">
    <result-types>
      <result-type name="json" class="org.apache.struts2.json.JSONResult" />
    </result-types>
    <interceptors>
      <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" />
    </interceptors>
    
    <action name="meeting_record_form" class="com.task.action.MeetingRecordAction" method="updateAttendeesRecord">
     <result name="success" type="json" />
    </action>
</package>

Мой pom.xml:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-json-plugin</artifactId>
    <version>2.3.15</version>
</dependency>
06.12.2013

  • Не могли бы вы предоставить некоторую информацию, что именно происходит? 06.12.2013
  • @mic4ael: метод updateAttendeesRecord() работает успешно, и данные успешно обновляются, но я либо получаю предупреждение об ошибке, либо не определено 06.12.2013
  • Может быть, попробуйте добавить: async : false в свой $.ajax 06.12.2013
  • @mic4ael: асинхронность: false не сработало 06.12.2013
  • Можно попробовать data: encodeURI(arr) 06.12.2013
  • Попробуйте предупредить сообщение об ошибке из обратного вызова ошибки. 06.12.2013
  • @mic4ael: я получаю сообщение об ошибке неопределенного значения. и в консоли firebug я получаю 500 (внутренняя ошибка сервера) o.extend.ajax jquery-1.3.2.min.js:19 06.12.2013

Ответы:


1

В конфигурации действия вы не должны переопределять конфигурацию по умолчанию из пакета json-default, просто расширяйте ее и все. Также json-default расширяет struts-default, поэтому множественное наследование не требуется.

<package name="default" extends="json-default">
  <action name="meeting_record_form" class="com.task.action.MeetingRecordAction" method="updateAttendeesRecord">
    <result name="success" type="json" />
  </action>
</package>
06.12.2013
  • @coding_idiot Спасибо, что указали на то, что json-default расширяет struts-default. 09.12.2013

  • 2

    Проблема в вашем классе Action MeetingRecordAction, метод updateAttendeesRecord является закрытым, он должен быть общедоступным

    public String updateAttendeesRecord() {
        meetingRecordService.updateAttendeesRecord(attendeesListMethod(), meeting_record);
        setMyMsg("Update Successful!");
            return SUCCESS;
    }
    
    06.12.2013

    3

    Я решил свою проблему, добавив myMsg в результат json. Спасибо за помощь

    09.12.2013
    Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..