2013-03-06 2 views
0

HTML 요소의 내용을 JSON 개체 속성으로 바꾸는 데 문제가 있습니다.jQuery : JSON 응답으로 내용을 바꾸는 방법

url = '/blah/blah-blah'; 
data = $.getJSON(url); 
$(this).parent('.status').replaceWith(data.content); 

지금, 내가 올바른 JSON 객체가 반환되고 있음을 알고는 '콘텐츠'라는 올바른 형식의 속성을 포함 : 여기에 내 코드입니다. (콘솔에 표시하고 있습니다). 둘째, 교체 할 올바른 요소를 선택하고 있음을 알고 있습니다. (data.content을 'bingo!'로 바꾸면 화면에 텍스트가 표시됩니다.)

위의 코드를 실행하면 요소의 내용이 아무것도 대체되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

data.responseJSON.content으로 바꾸려고했으나 도움이되지 않았습니다.

감사합니다. 아마 '정의되지 않은'- 당신의 예에서

+0

무엇 ['$ .getJSON' 문서]에 대한 (http://api.jquery.com/jQuery.getJSON/가) 당신이 그것을 생각하게 반환은 JSON을 * 문자열 및/또는 직렬화되지 않은 데이터? –

+0

console.log (data) 또는 console.log (data.content)를 할 때 어떤 결과가 발생합니까? 콘솔의 – frenchie

+0

은 json 응답 또는 js 객체를 올바르게 표시하고 있습니까? 즉, 실제로 data.content가 정의되지 않았습니까? – gpasci

답변

4

당신은 콜백을 사용할 필요가,

url = '/blah/blah-blah'; 
    $.getJSON(url, function(data) { 
    $("some selector").parent('.status').replaceWith(data.content); 
    }) 

는 $ .getJSON 의미 아무것도 반환하지 않습니다. 한편, 귀하의 요청을합니다. getJSON가 성공하면 (자), 결과는 처리 함수에 건네지는 처리 함수에 건네집니다. 콜백을 제공하지 않으면 서버에서 응답을 받으면 아무 반응이 없습니다.

또는 새 선택기를 사용하지 않으려면 $ (this)를 절약 할 수 있습니다.

url = '/blah/blah-blah'; 
    item = $(this) 
    $.getJSON(url, function(data) { 
    item.parent('.status').replaceWith(data.content); 
    }) 
+0

알겠습니다. 그러나 함수를 콜백으로 정의하면 $ (this)가 여전히 클릭 된 요소를 참조합니까? –

+0

아, 아니, 그게 좋은 지적이야. 다르게 선택해야합니다. 내 대답을 편집 할게. – bchurchill

+0

감사합니다. bchurchill! –

1

AJAX 호출은 비동기식이므로 AJAX 호출은 사용하려고 할 때 아직 도착하지 않았습니다. 콘솔에 표시 할 때 응답이 즉시 도착하지 않을만큼 빠르지 못합니다.

도착하면 데이터를 처리하기 위해 getJSON 호출 콜백을 사용 : .getJSON(url) 호출이 완료되기 전에

url = '/blah/blah-blah'; 
$.getJSON(url, function(data) { 
    $(this).parent('.status').replaceWith(data.content); 
}); 
1

귀하의 코드가 실행된다. 성공 핸들러과 같이 지정하십시오 : *

$.getJSON(url, function(data) { 
    $(this).parent('.status').replaceWith(data.content); 
}); 
관련 문제