[JQUERY] JSON 값을 반환 실행
JQUERYJSON 값을 반환 실행
해결법
-
1.데이터 형식 : 'JSON'이 행동과 결과가 실행될 때 성공 콜백 함수에 의해 반환 것으로 예상되는 데이터 유형 및 서버에서 반환 된 응답을 지정 jQuery를 아약스에 의해 사용된다.
데이터 형식 : 'JSON'이 행동과 결과가 실행될 때 성공 콜백 함수에 의해 반환 것으로 예상되는 데이터 유형 및 서버에서 반환 된 응답을 지정 jQuery를 아약스에 의해 사용된다.
URL은 올바르게 행동 매핑 가리켜 야합니다. 그렇지 않으면 당신은 URL을 수정하고 네임 스페이스 속성을 추가 매핑해야한다, 그것은 기본 네임 스페이스에있을 것입니다 가정합니다.
<script type="text/javascript"> $(function() { $("#dialog-form").dialog ({ autoOpen: true, height: 500, width: 750, modal: true, buttons : { "Search" : function() { $.ajax({ url : '<s:url action="part" />', success : function(data) { //var obj = $.parseJSON(data); var obj = data; alert(JSON.stringify(obj)); } }); } } }); }); </script>
수동으로 된 JSONObject를 구축 할 경우 반환 JSON 결과 유형은 필요하지 않습니다. 당신은 필요한 경우 다음 JSON 문자열을 변환 스트림 결과로 텍스트를 반환 할 수 있습니다.
struts.xml :
<package name="default" extends="struts-default"> <action name="part" class="action.PartAction" method="finder"> <result type="stream"> <param name="contentType">text/html</param> <param name="inputName">stream</param> </result> </action> </package>
동작:
public class PartAction extends ActionSupport { public class SearchResult { private String col1; private String col2; public String getCol1() { return col1; } public void setCol1(String col1) { this.col1 = col1; } public String getCol2() { return col2; } public void setCol2(String col2) { this.col2 = col2; } public SearchResult(String col1, String col2) { this.col1 = col1; this.col2 = col2; } } private InputStream stream; //getter here public InputStream getStream() { return stream; } private List<SearchResult> findList = new ArrayList<>(); public List<SearchResult> getFindList() { return findList; } public void setFindList(List<SearchResult> findList) { this.findList = findList; } private String list() { JSONObject jo = new JSONObject(); try { for (SearchResult part : findList) { jo.put("col1", part.getCol1()); jo.put("col2", part.getCol2()); } System.out.println("--------->:"+jo.toString()); } catch (Exception e) { e.printStackTrace(); System.out.println(e.getMessage()); } return jo.toString(); } @Action(value="part", results = { @Result(name="stream", type="stream", params = {"contentType", "text/html", "inputName", "stream"}), @Result(name="stream2", type="stream", params = {"contentType", "application/json", "inputName", "stream"}), @Result(name="json", type="json", params={"root", "findList"}) }) public String finder() { findList.add(new SearchResult("val1", "val2")); stream = new ByteArrayInputStream(list().getBytes()); return "stream2"; } }
더 나은 아이디어를 설명하는 결과 유형 및 내용 유형과 다른 결과를 배치했다. 이러한 결과 중 하나를 반환하고 JSON을 객체도 캐릭터 라인 여부 중 하나를 반환 할 수 있습니다. 캐릭터 라인 버전은 JSON 객체를 얻기 위해 반환 된 데이터를 분석해야합니다. 당신은 또한 당신의 요구에 맞게 직렬화 더 나은하는 결과 유형을 선택할 수 있습니다하지만 내 목표는 JSON 플러그인 후 간단한 개체를 serialize해야하는 경우가 작동하게 할 필요가 없습니다 것을 보여이었다.
참고 :
-
2.Struts2 JSON 플러그인은 특정 방식으로 작동합니다 :
Struts2 JSON 플러그인은 특정 방식으로 작동합니다 :
그것은 JSON에 전체 동작을 직렬화 제외
당신이 원하지 않는 경우 전체 작업 직렬화,하지만 당신의 선택의 하나의 목적은, 당신은 루트 개체를 지정할 수 있습니다 :
그것은이 같은 struts.xml에서 수행 할 수 있습니다 :
<result type="json"> <param name="root"> objectToBeSerialized </param> </result>
반면에게 조치해야한다 :
private CustomObject objectToBeSerialized; public CustomObject getObjectToBeSerialized(){ return this.objectToBeSerialized; }
CustomObject는 원시를 할 수있는 등 문자열, 배열, ...
이런 식 (이 위해 구축되는 방식)를 사용하여, 당신은 어떤 같은 AJAX jQuery를 호출의 콜백 함수에서 직렬화 된 JSON 객체를 프레임 워크 규칙을 파괴하지 않고, 다른 AJAX Struts2 액션에 같은 성공 및 오류를 반환 및 액세스 할 수 있습니다 다른 필드 (rootObject를 사용하는 경우, var에 handledata = 기능 (데이터)의 "데이터"그렇지 않으면 액션 것, 당신의 객체가 될 것이다).
귀하의 경우, 개체 구조를 가정하는 것은 다음과 같습니다
row1 [col1, col2], row2 [col1, col2], rowN [col1, col2]
당신은 두 개의 열을 가진 객체의 목록을 만들 수 있습니다 :
값 개체
public class MyRow implements Serializable { private static final long serialVersionUID = 1L; private String col1; private String col2; // Getters public String getCol1(){ return this.col1; } public String getCol2(){ return this.col2; } }
Action 클래스
public class PartAction implements Serializable { private static final long serialVersionUID = 1L; private List<MyRow> rows; // Getter public List<MyRow> getRows() { return this.rows; } public String finder() { String result = Action.SUCCESS; rows = new ArrayList<MyRow>(); try { Iterator it = findList.iterator(); while(it.hasNext()) { SearchResult part = (SearchResult) it.next(); MyRow row = new MyRow(); row.setCol1(part.getcol1()); row.setCol2(part.getcol2()); rows.add(row); } } catch (Exception e) { result = Action.ERROR; log.error(e); } return result; } }
Struts.xml
<package name="default" namespace="/ajax" extends="json-default"> <action name="finder" class="action.Part" method="finder" name="finder"> <result type="json" > <param name="root"> rows </param> </result> </action> </package>
AJAX와 콜백 함수에서 테스트하려면 $ .each를 사용합니다 :
var handledata = function(data) { $.each(data, function(index) { alert(data[index].col1); alert(data[index].col2); }); }
물론 대신 사용자 정의 개체, 또는 좀 더 이것보다 좋아하는 다른 개체 구조의 목록 <리스트 <문자열 >>을 사용할 수 있습니다 : 그것은 당신에게 아이디어를 얻을 만했다.
from https://stackoverflow.com/questions/17093862/issue-returning-json-value by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] jQuery를 선택기에서 와일드 카드 (0) | 2020.09.29 |
---|---|
[JQUERY] jQuery를 사용하여 HTML 요소를 만들 수있는 가장 효율적인 방법은 무엇입니까? (0) | 2020.09.29 |
[JQUERY] 이유는 jQuery를위한 구글의 CDN을 사용해야합니까? (0) | 2020.09.29 |
[JQUERY] JQuery와 아약스 웹 서비스에 JSON을 게시 (0) | 2020.09.29 |
[JQUERY] 나는 양식을 제출하지 않는 <버튼>을 만들 수 있습니까? (0) | 2020.09.29 |