2013-05-16 5 views
0

내가 다음과 같습니다 자바 스크립트에서 JSON 응답이 속성에 액세스 할 수 없습니다 :이 데이터는 응답입니다 console.log(data)을 적용한 결과입니다JSON 응답이

{"opt1":"2.92","opt2":"4.24","opt3":"6.36"}; 

그러나

success: function(data){ 
      console.log("Ajax succeeded"); 
      console.log(data); 
      console.log(data.opt1); 
     }, 

을, I opt1 값에 액세스 할 수 없습니다. 콘솔에 정의되지 않음이 표시됩니다. 이것이 왜 그런가? JSON이 유효한지 확인했습니다.

EDIT

이 경우에는 서버에 JSON 배열 변환 PHP에로 json_encode 함수를 사용한다. 나는 마지막에 세미콜론을 제거하려고 노력했다. 이것은 여전히 ​​opt1에 대해 정의되지 않은 값을 제공한다. 또한 ajax 호출의 dataType을 설정하여 오류가 발생하여 예기치 않은 문자가 있음을 나타냅니다.

+1

그것이 정말 마지막에 세미콜론이 있습니까? 유효하지 않은 JSON입니다. 당신은'console.log (data)'가 JSON 문자열을 _ _ string_으로 로깅하지 않는다고 확신합니까? 명시 적으로 jQuery에 JSON을 기대하고 있다고 말하지 않은 경우 응답 형식이 무엇인지 추측하려고합니다. 문자열이 유효하지 않은 JSON이므로 JSON은 구문 분석하지 않으므로 속성에 액세스 할 수 없습니다. . – nnnnnn

+0

더 많은 코드보기 - AJAX 호출에서'dataType : "json"'을 지정하고 있습니까, 아니면'Content-type : application/json'을 보내는 서버입니까? – Barmar

+0

@PankajGarg : 1. 귀하가 가리키는 대답은 OP가 약술 한 문제와 아무런 관련이 없습니다. 2. 당신의 대답을보기 위해 영업 시간을 길게 잡는 것은 너무 쿨하지 않습니다. 답변을 게시 할 때 OP에 그 사실이 통보되었습니다. 그게 충분합니다. 댓글 게시 (불필요하게 굵은 글씨로 작성하는 것보다 덜)는 적절하거나 유용하지 않습니다. –

답변

4

data은 실제로는 문자열, 개체가 아닌 것 같습니다.

두 가지 당신이 수행해야합니다

먼저 : 그 세미콜론이 정말 있다면, 당신이 얻고있는 응답이 유효 JSON 없습니다. 세미콜론 서버 측을 제거하여이를 수정하려고합니다. (단, 아래를 참조하십시오.)

둘째 : 그런 다음 JSON 문자열을 객체로를 직렬화 있는지 확인하는 것이 좋습니다. 서버가 올바른 Content-Type 헤더 (application/json)로 응답하는 경우

  1. 그것은 자동으로 수행됩니다 : 여러 가지 방법이 있다고 할 수 있습니다. 이것이 최선의 방법입니다.

  2. 그런 경우가 아니고 해당 사항을 적용 할 수없는 경우 전화에 dataType: 'json'을 추가하십시오. 어떤 이유로 당신이 을 할 수없는 경우

  3. 수동 예를 들어, $.parseJSON를 통해 JSON 문자열을 구문 분석 할 수 있습니다 :

    data = $.parseJSON(data); 
    

    은 (parseJSON 행복하게 브라우저의 내장 JSON.parse 사용합니다 그것이 있으면.브라우저가 하나가없는 경우, jQuery를 자체를 사용합니다) 어떤 이유로 당신이 잘못된 ; 서버 측을 제거 할 수없는 경우


, 당신은 그것을 해결할 수 있습니다.

  1. successajax 전화

  2. dataType: 'text'을 추가

    data = $.parseJSON(data.replace(/;$/, '')); 
    

    거기에 있으면 세미콜론이 제거되고 결과가 구문 분석됩니다.

+0

그 마지막 제안은 나를 위해 일했습니다! 아직도 어떻게 이런 일이 일어날 지 아직 모르겠다. 세미콜론은 어디에서 왔습니까? 그것은 json_encode를 사용하여 JSON 객체로 직접 변환 된 배열입니다. – danvdende

+0

@danvdende : 마지막 옵션이 도움이 되었기 때문에 기쁩니다! 'json_encode'는 확실히 세미콜론을 넣지 않으므로 PHP 파일에 추가 된 출력물이 추가되어야한다고 생각하고 있습니다 ...? –

+0

전체 파일을 검사했는데 거기에 다른 반향은 없습니다 ... 실제로 매우 이상합니다 – danvdende

0

그것은 인해 서버에서 문자열로 돌아 오는 응답에 아마 (내가 같은 문제를 했어) ... 시도 :

success: function(data){ 
    var json = $.parseJSON(data); 
    console.log("Ajax succeeded"); 
    console.log(json); 
    console.log(json.opt1); 
}, 
+0

'data.toJSON()'이 아니라'$ .parseJSON (data)'가 필요합니다. – moonwave99

+0

parseJSON으로 변경 ... http://www.w3schools.com/jsref/jsref_tojson.asp에서 toJSON을 얻었지만 그 방법은 Date 메서드에 불과합니다. –

+0

시도해 보았습니다. $ .parseJSON (data), 알려줍니다. Uncaught SyntaxError : Unexpected token; – danvdende

0

를 사용하여 기본 통화

json = JSON.parse(data); 

또는 이런 JSON으로 AJAX의 매개 변수를 확인 .. t에서

$.ajax({ 
    url : blahblah, 
    dataType : 'json', 
    ..... 
}); 

을 귀하의 답변은 자동으로 json으로 변환됩니다

0

시도 jQuery.parseJSON(obj).

jQuery.parseJSON() Takes a well-formed JSON string and returns the resulting JavaScript object. 

이 방법으로 그것을 사용

var str = '{"opt1":"2.92","opt2":"4.24","opt3":"6.36"}'; 
var obj = jQuery.parseJSON(str); 
console.log(obj.opt1);