루카스모
4k
2021-04-01 13:34:57 작성 2021-04-01 13:39:09 수정됨
5
136

jsp에서 ajax로 데이터 보여주기 질문이요


참고로 스프링 프레임워크를 사용하는데 이는 질문과는 딱히 상관 없을것 같습니다.


제 질문은

특정 링크(jsp)를 들어오면 원하는 값에 맞게 페이지 새로고침 없이 데이터를 보여주려고합니다.

즉, test/main.do 페이지에 접속할 때는 당연히 페이지가 새로 고쳐지는게 맞는데

그 뒤로는 main.do에서 원하는 버튼을 누르면 페이지 새로고침 없이 id(버튼에 따라 다름)에 맞게 데이터를 보여주려고합니다.


현재 코드는

test/main.do 링크를 방문하자마자

데이터를 보여주기 위해 doshowlist() 함수를 실행시킵니다.

doshowlist() 에서 ajax로 페이지에 데이터를 보여주는데

doshowlist()의 ajax를 성공시키면 발생하는 dospread() 함수가 있는데 dospread() 함수 안에서 버튼을 클릭했을 때

donew(id) 라는 함수 발생시키서 id에 맞게 href로 새로고침을 해줍니다.


즉, 기존에는 donew(id) 함수안에 있는 href로 페이지를 새로고침하는데

이제는 main.do 에 방문하고 난 뒤로는 페이지 새로고침을 하지 않고 ajax를 통해서 데이터를 보여주려고 합니다.

그래서 dospread()에서 넘겨주는 temp.id 값을 doshowlist()에 인자를 넣어 보려고 하는데..

애초에 main.do에 최초 방문시에는 doshowlist()에 인자가 없기 때문에 .. 이를 어떻게 처리할지 고민입니다.


결국엔

방법 1.

즉, main.do 페이지를 방문 하고 doshowlist()에서 ajax로 데이터를 보여주고

dospread() 에서 버튼을 클릭했을 떄 temp.id값에 따라 페이지 새로고침 없이

doshowlist()를 이용해서 ajax를 사용해 데이터를 보여 주려고합니다.

이 방법이 가능할 까요?


또한

방법 2.

즉, main.do 페이지를 방문 하고 doshowlist()에서 ajax로 데이터를 보여주고

dospread() 에서 버튼을 클릭 했을 떄 temp.id값에 따라 페이지 새로고침 없이

doshowlist() 말고 다른 함수를 만들어서 ajax를 사용해 데이터를 보여주면 될것같은데

그러면 함수하나 더 사용하는거 말고는 다른게 없나요?


이 상황을 어떻게 해결해야 할지 알려주시면 감사하겠습니다.

아래는 현재 제 코드를 이해하기 쉽게 간략하게 나타냈습니다.

main.jsp의 코드

$(function(){
  doshowlist()
  // ~~
});

function doshowlist(){
  // ~~
  ajax()
    type : "POST"
    url:
    // ~~
    success function(data){
      // ~~
      var list = data.data;
      dospread(list);
    }
}

function dospread(list){
  // ~~
  var info = list.lst;
  var i;

  for(i = 0; i < 5; i++){
    var temp = info[i];
    temp += "<button type = 'button' onclick='donew("+ temp.id +")'>버튼</button>"
  }
}

function donew(id){
  document.location.href= "${pageContext.request.contextPath}/test/main.do?id"+id;
}


0
  • 답변 5

  • 실성사이다
    223
    2021-04-01 14:02:42


    버튼을 클릭하면 donew 함수를 호출하는데, 이걸 doshowlist()를 호출 하도록 바꿔줍니다.

    그리고 ajax 호출할때 파라미터 값을 넘겨서 해당 temp.id의 데이터를 가져와서 뿌려주면 될 것 같아요.


  • 루카스모
    4k
    2021-04-01 14:18:47

    실성사이다

    답변 감사합니다.

    그러면 인자문제는 어떻게 하죠? 

    doshowlist(temp.id)로 인자를 넘겨줘야 할텐데

    최초에 doshowlist() 에서 받는 인자가 없어서요..

    아.. 그냥 아무 인자나 넣어줘도 어차피 null 값이면 아무일도 안일어나서

    그냥 doshowlist() 함수에 인자 넣어주면 될라나요



  • 실성사이다
    223
    2021-04-01 14:25:57

    처음에 값이 안넘어갔을때는

    controller나 mybatis에서 처리를 해주면 될 것 같아요.


  • 루카스모
    4k
    2021-04-01 14:34:57

    실성사이다 

    그런데 원래

    $(function(){

         doshowlist(arg);

    })

    이런식으로 arg값에 아무것도 없을때에도 아라의 doshowlist() 함수로 넘어가야 정상아닌가요?

    넘어가지 않아서 여쭤봅니다.. 

    function doshowlist(arg){

    //~~

    }

    이걸 controller와 mybatis에서 처리한다는건 처음들어서 어리둥절하네요

  • 실성사이다
    223
    2021-04-01 14:49:28

    값이 없을때는 doshowlist(""); 이렇게 호출 하면 될 것 같아요.

    버튼을 클릭했을 때는 doshowlist(temp.id); 로 아이디 값이 넘어갈거구요.

    그럼 ajax에서는 id을 파라미터 값으로 넘기는거죠.

    funcfion doshowlist(id) {

        $.ajax({

            type: "POST",

            url: "",

            data: {id:id}

        });

    }

    그럼 컨트롤러에서 id 값으로 해당 데이터를 가져와서 뿌려주면 될 것 같아요.

    도움이 되셨길..

  • 로그인을 하시면 답변을 등록할 수 있습니다.