2013-01-07 4 views
0

저는 JQuery를 처음 접했습니다. 아래의 코드가 작동하며 Firebug에서 올바른 JSON 응답을 볼 수 있습니다. 그러나 나는 코드에서 그것을 얻고 파싱하는 방법을 찾을 수 없었다. 경고 창에는 "[object Object]"만 표시되고 json 텍스트는 표시되지 않습니다.JQuery parse JSON

<script> 

$.ajaxSetup({ cache: false }); 

var _token; 

function make_token_auth(user, token) { 
    var tok = user + ':' + token; 
    return "Token " + tok; 
} 


$.ajax 
    ({ 
    type: "GET", 
    url: "url", 
    dataType: 'json',  
    beforeSend: function (xhr){ 
     xhr.setRequestHeader('Auth', make_token_auth('userid', 'token')); 
    }, 
    success: function (data){ 
     alert(data); 
    } 
}); 

</script> 
+1

console.log (data)는 어떨까요? ? –

+3

'console을 사용하십시오.(IE가 아닌) 좋은 브라우저에서'alert()'대신'log (data)'를 사용하면 콘솔에 항목별로 표시되는 데이터 객체의 속성을 볼 수 있습니다. –

답변

3

사실은 당신이 jQuery를이 수신 된 응답을 분석하고 성공 콜백에 자바 스크립트 객체로주고 알려줍니다

dataType: 'json',  

을 precised.

여기에있는 내용은 문제가 없으며 경고 대상은 정확합니다 (이 개체는 alert은 단순히 data.toString()의 결과를 인쇄 함).

사용 console.log 그것이 정확히 무엇인지 볼 수 있습니다 :

success: function (data){ 
    console.log(data); 
} 

및 개체의 속성을 탐색 할 developer tools in Chrome 또는 the console in Firebug를 엽니 다.

+0

그는 Firebug를 사용한다고 이미 지정 했으므로 Chrome 개발자 도구에 연결하는 이유를 모르십니까? – SDC

+0

@SDC 네 말이 맞아. Firebug의 콘솔 링크를 추가했습니다. –

1

alert 함수는 문자열 또는 숫자를 전달해야합니다.

하면이 같은 일을 시도해보십시오 의견에 대 한 응답에서

for(x in data) { 
    alert(x + ': ' + data[x]); 
} 

업데이트 : 당신은 서버 측 코드에 의해 반환되는 객체의 문자열 및 숫자 값을보고 개발 또는 생산에 경고를 사용할 수 있습니다.

그러나 신중하게 질문을 다시 읽으면 실제 JSON 텍스트를보고 싶은 것처럼 보입니다. 위의 @ dystroy의 대답을 보면, $ .ajax 호출에서 dataType: 'json'을 제거하면 jQuery는 자동으로 응답을 일반 텍스트로 처리하는 대신 Object로 처리한다고 생각합니다. 이 경우 alert 함수에 전달하여 텍스트를 볼 수 있습니다.

+1

[경고에 전달 된 개체는 자동으로 변환됩니다] (https://developer.mozilla.org/en-US/docs/DOM/window.alert). –

+0

@dystroy, 내 경험상 일반적인 객체는 문자열로 캐스트 될 때'[object Object]'가됩니다. 이 동작을 변경하는 방법을 알고 있습니까? –

+0

당신은 정말로 틀린 것이 아닙니다. 제가 지적한 바는 '경고'는 특히 "문자열 또는 숫자"를 "기대하지"않는다는 것입니다. [object Object]보다 읽기 쉬운 것을 기대하는 사용자가 많습니다. 그리고 숫자에는 특별한 것이 없습니다. –

3

디버그 용으로 alert()을 사용하지 마십시오.이 경우에는 도움이되지 않으며 비동기 코드 (예 : Ajax)와 함께 사용하면 프로그램 흐름을 방해하기 때문에 심각한 문제가 있습니다.

브라우저의 console.log() 또는 console.dir() 기능을 사용하고 콘솔에 표시된 개체를 보는 것이 훨씬 나을 것입니다. 그것은 훨씬 더 기능적이며 프로그램의 흐름을 방해하지 않습니다.

따라서 alert(myjsonvar) 대신 console.log(myjsonvar)을 사용하십시오.

+0

어디 콘솔 출력을 볼 수 있습니까? – Spring

+1

@spring - in Firebug. 방화 광 창의 상단에있는 "콘솔"탭을 참조하십시오. – SDC

1

당신은 JSON.stringify

var jsonstr = JSON.stringify(data); 
alert(jsonstr); 
0

는 그런 다음 데이터를 원하는대로 할

data = JSON.parse(data) 

를 사용해보십시오 사용하여 JSON 문자열을 얻을 수 있습니다.

출처 : JSON.parse() (MDN)

+0

SyntaxError가 발생합니다 : JSON.parse : 예기치 않은 문자 – Spring

+0

내 코드를 검사하면 객체가 반환되지만 함수는 문자열을 파싱합니다. – Spring

+0

오, 내 잘못입니다. 'console.log()'또는'alert()'대신'console.dir()'을 사용하여 객체의 내용을보십시오. 적어도 당신이 정답을 맞는지 알 수 있습니다. 당신의 콘솔. http://stackoverflow.com/questions/1637334/iterating-through-parsing-json-object-via-javascript에서 살펴볼 수 있습니다. –