2013-02-02 3 views
0

JSON 개체에서 일련의 문자열을 가져 와서 하나의 큰 문자열로 연결하려고합니다. 루프를 사용하여 루프의 모든 반복에서 각 새 문자열을 추가하는 것이 꽤 분명했습니다. 그러나 실제로 플러그를 꽂았을 때 이상한 오류가 나타납니다.자바 스크립트를 사용하여 JSON에서 정보를 동적으로 검색합니다.

TypeError: data.posts[i] is undefined 

나는 일반적으로 그냥 여기가 (내가 교육 추측에이 많이 내놓고있어 그래서 자바 스크립트에 새로 온 사람)처럼 호출 할 수 없습니다 가정,하지만 것은 이상한 일이 : 로그 I 방화 광디스크 (firebug)에 인쇄하면 예상되는 정보가 정확하게 포함됩니다. 내가 설명 할 수없는 오류와 함께 살 수 있지만, 다음 웹 페이지에 결합 된 문자열을 표시하지 않습니다.

var data = JSON.parse(d); 
var i = 0; 
while(i <= data["posts"].length) { 
    messages += "<b>" + data["posts"][i]['nickname'] 
      + ":</b> - " + data["posts"][i]['content'] + "<br>"; 
    i++; 
    console.log(messages); 
} 
console.log(messages); 
$('.post1').html(messages); 

내가 정확히 여기에 누락 되었습니까?

+0

JSON의 구조는 무엇입니까? – YoannM

+0

무언가가 매우 이상합니다. 오류 메시지가 게시 한 코드와 일치하지 않는 것 같습니다 ... 어떤 줄에서 오류가 발생 했습니까? – Hogan

+0

while 루프의 첫 번째 줄에서 오류가 발생합니다. JSON은 '오류'및 '게시물'이 포함 된 배열입니다. 게시물은 데이터베이스 쿼리의 행으로 채워집니다. $ data [ 'posts'] = $ this-> communication_model-> fetch_posts ($ username, $ offset); –

답변

2

유일한 문제인 경우 귀하의 질문에 말하기 어렵지만 한 가지 문제 만있는 것처럼 보입니다. 배열은 0 색인 경우 - n은 다음 길이를 반환 N + 1 및 루프는 내가 사용 for 루프 및 반환의 전체 블록을 정의하는 것을 권해 < 아닌 <=

+0

글쎄, 이제는 커다란 바보처럼 느껴집니다. 그래도 도움을 주셔서 감사합니다! –

0

while(i < data["posts"].length) { 

참고해야한다 데이터를 단일 세트 (예 : 데이터)로 정의해야합니다.

다음과 같은 방법을 사용 : 그래서

$.ajax(
{ 
    // Post variable1 to url. 
    type : 'post', 
    url : 'urlToBackend, 
    dataType : 'json', 
    data : 
    { 
     'variable1' : 'theValue' 
    }, 
    success : function(data) 
    { 
     var message; 
     var reply1; 
     var reply2; 

     for(var i = 0; i < data.length; i++) 
     { 
      reply1 = data[i].reply1FromBackend; // Assuming that reply1FromBackend was returned. 
      reply2 = data[i].reply2FromBackend; // Assuming that reply2FromBackend was returned. 

      message += reply1; 
      message += reply2; 
     } 
     // do something 
    }, 
    complete : function(data) 
    { 
     // do something 
    } 
}); 

그냥 URL이 백엔드는 다음과 같이 백엔드 에코의 reply1FromBackend 및 replyFromBackend 변수 1에 것을 무언가를 할 수있는, 유효한지 확인해야을 :

// Receive the posted variable's value if it is set. 
$variable1= isset($_POST['variable1']) ? $_POST['variable1'] : false; 

// ... do something 

$json[] = array 
(
    'reply1FromBackend' => 'yo', 
    'reply2FromBackend' => 'sup' 
); 
echo json_encode($json); 
flush(); 

도움이 되었습니까?

관련 문제