rud
355
2017-04-19 12:22:36
17
7819

json 객체를 왜 받지 못할까요?


$(function(){

$('#btnidcheck').click(function(){

var id = $('#id').val();

var sendData = "id=" + id;

alert(sendData);

$.ajax({

type:"GET",

url:"idcheckResult.jsp",

data:sendData,

dataType:"json",

success:function(data){

alert("성공");

$("#message").html(data);

alert(data.id);

},

error:function(data){

alert("실패");

}

});

});

});


이 코드를 통해서 지금 id값을 넘겨주고 결과값을 받아오려고 합니다.


idcheckResult.jsp파일


<%

int data = selectController.idCheck(request.getParameter("id"));

String str = "";

if (data == 0) {

str = "회원가능한 아이디명입니다.";

} else {

str = "이미 존재하는 아이디명입니다.";

}

JSONObject obj = new JSONObject();

obj.put("id", str);

out.clear();

out.println(obj);

out.flush();

%>


println으로 분명 obj 출력을 했는데 넘어가 지질않네요...


혹시몰라 System.out.println(obj);를 해보니

{"id":"회원가능한 아이디명입니다."} 라고 뜹니다만.....


(즉 저기까지는 가는데 받아올때 문제가 생기는거 같습니다.)


text로는 받습니다만 왜 json으로는 못받을까요...

0
  • 답변 17

  • 겨울의속삭임
    1k
    2017-04-19 13:32:33

    var sendData = {'id' : id};


  • Mambo
    8k
    2017-04-19 13:53:21

    alert 보다는 console.log(data)로 개발자도구를 통해 확인하세요 자세하게 나오니까요

  • rud
    355
    2017-04-19 14:12:58

    일단 sendData는 잘넘어갑니다.

    json으로 바꿧을시에는 바로 error가 떠서 data를 확인해볼수가없네요

  • Mambo
    8k
    2017-04-19 14:17:24

    error:function(data){

    alert("실패");

    }

    에러 콜백시에도 어떤응답을 받는지 확인가능합니다.

  • rud
    355
    2017-04-19 14:21:56

    거기서 어떤걸 보면될까요?


    Object {readyState: 4, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}abort: function (a)always: function ()arguments: (...)caller: (...)length: 0name: "always"prototype: Object__proto__: function ()[[FunctionLocation]]: jquery.min.js:2[[Scopes]]: Scopes[3]catch: function (a)done: function ()fail: function ()getAllResponseHeaders: function ()getResponseHeader: function (a)overrideMimeType: function (a)pipe: function ()progress: function ()promise: function (a)readyState: 4responseText: "

    ↵<!DOCTYPE html>

    ↵<html>

    ↵<head>

    ↵<meta charset="UTF-8">

    ↵<title>Insert title here</title>

    ↵</head>

    ↵<body>

    {"id":"회원가능한 아이디명입니다."}

    ↵</body>

    ↵</html>

    ↵"setRequestHeader: function (a,b)state: function ()status: 200statusCode: function (a)statusText: "OK"then: function (b,d,e)__proto__: Object


    이렇게뜹니다만..

  • Mambo
    8k
    2017-04-19 14:29:06

    응답 데이터가 html 형식이네요

    {"id":"회원가능한 아이디명입니다."} 만 응답데이터로 와야 jquery.ajax에서 json으로 파싱해줘요

  • rud
    355
    2017-04-19 14:31:00

    예 그 응답데이터를...json으로 하고싶은데 그 방법을 모르겠습니다.


    혹시


    <%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>


    이부분에서 contentType을 바꿔줘야되는건가요?

  • 엘딘
    1k
    2017-04-19 14:35:26

    해당 응답 response 데이터에 object 를 넣었다고 해서 

    결과값에 object 가 들어갈 수 있는건 아닙니다..

    지금 ajax -> jsp 통신 중간에서 해당 object를 Json Object 타입으로 컨버팅을 해줘야 하지만

    위 방식으로는 좀 어렵습니다.


    제가 보기엔 response 데이터에 String 으로 json 타입으로 만들어 내야 됩니다.

    \"id\" : \"회원가능한 아이디명입니다.\" 


    위 방식으로 jsp에서 String 문자열로 넣어서 response에 보내시고

    data를 console.log 로 찍어서 실제로 문자열 데이터로 오는지 확인한뒤에

    success 에서 data 를 -> Json object로 컨버팅 하고 -> 그 후에 data.이 가능합니다.


    일반적으로 spring 을 사용하면 JAXSON converting 방식으로 

    @ResponseBody 라는 어노테이션으로 Map을 보내면 컨버팅을 해주지만..

    위의 ajax to jsp 에서는 문자열로 주고 받은 후 컨버팅 하는 방식이 제일 기초적입니다.

  • Mambo
    8k
    2017-04-19 14:36:46

    빈 jsp파일에서 

    출력만 하시면됩니다.

    지금은 html 문서형태로 된 body 태그안에 출력하고 계시겟죠

  • rud
    355
    2017-04-19 14:48:52

    <%@ page language="java" contentType="charset=UTF-8"

    pageEncoding="UTF-8"%>

    <jsp:useBean id="selectController"

    class="client.connector.DaoConnection" />

    <%@ page import="org.json.simple.*" %>

    <%

    request.setCharacterEncoding("UTF-8");

    int data = selectController.idCheck(request.getParameter("id"));

    String str = "";

    if (data == 0) {

    str = "회원가능한 아이디명입니다.";

    } else {

    str = "이미 존재하는 아이디명입니다.";

    }

    System.out.println(str);

    String res = "\"id\":\"회원가능한 아이디명입니다.\""; 

    response.setContentType("application/json");

    response.getWriter().write(res);

    %>


    지금 이 형식으로 보냈습니다만... 받지를 못하고 "id:??????????" 이렇게 뜨네요(str부분은 신경안쓰셔도됩니다 그냥 가는지만 확인하려고 res를 썻습니다.) 해결하고싶은데 너무힘드네요 ㅠ

  • Mambo
    8k
    2017-04-19 14:57:11

    response.setCharacterEncoding("UTF-8");

    해보세요

  • rud
    355
    2017-04-19 15:00:56

    아 이제 제대로 넘어가는데


    Object형식으로 

     id : "회원가능한 아이디명입니다." 

    이렇게 넘어오네요. 그런데 이게 object형식이라서 그런지 

    JSON.parse를 먹지 않습니다 그래서 json object 컨버팅을 해야겠는데 어떻게 해야될까요?


  • Mambo
    8k
    2017-04-19 15:04:02

    data.id 라고 찍엇을때 회원가능한 아이디명입니다가 뜬다면 이미 json형식이에요

  • rud
    355
    2017-04-19 15:07:36

    아 이미 json으로 넘어왔네요. 도와주신 2분께 진심으로 감사드립니다.

  • 엘딘
    1k
    2017-04-19 15:08:18

    위에꺼는 그냥 단순 String 입니다. javascript 에서 jsonObject로 컨버팅 하는 내용을 찾아보시면 될겁니다.

    console.log에서 data를 찍었을때 Object object 로 나와야 json object로 변환된것입니다.

  • 엘딘
    1k
    2017-04-19 15:10:10 작성 2017-04-19 15:10:32 수정됨

    "id" : "xxxx"


    위 상태라면 양쪽에 {} 이거를 붙여서 json.parse 를 해보심이 좋을거 같네요.


    http://stackoverflow.com/questions/10976897/converting-a-string-to-json-object

  • 프궁
    178
    2017-04-20 15:53:43

    json은 키와 벨류로 이루어 지자나유

    data 부분의 앞은 키값, 뒤에건 ID가 id인놈의 벨류값.


    $(function(){
    
    	$('#btnidcheck').click(function(){
    
    		var id = $('#id').val();
    
    		$.ajax({
    
    			type:"GET",
    
    			url:"idcheckResult.jsp",
    
    			data:{id:id},
    
    			dataType:"json",
    
    			success:function(data){
    
    				alert("성공");
    
    				$("#message").html(data);
    
    				alert(data.id);
    
    			},
    
    			error:function(data){
    
    				alert("실패");
    
    			}
    
    		});
    
    	});
    
    });


    성공시 html로 밀어버리는게 어떤건지 모르니 패스하구..

    json타입이라 데이터 형태의 문제는 아닐까요?


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