2012-09-21 3 views
0

하루 종일 게시하는 것이 유감입니다. 나는이 코딩을하는 완전 초보자이다. 기본적으로 여기 많은 사람들이 도움을 받아 처음으로 JSON을 설치하려고합니다. 입력에 대해 목록을 평가하려고합니다. 샘플 데이터는 다음과 같습니다.JSON 설정 값의 루프가 왜 발생합니까?

{ 
    " 

films": [{ 
     "label": "34", 
     "value": "34", 
     "currently_streaming": "1", 
     "full_streaming_url": "http://www.url.com", 
     "url": "http://www.url.com"}, 
    { 
     "label": "A Different Color", 
     "value": "A Different Color", 
     "currently_streaming": "1", 
     "full_streaming_url": "http://www.url.php", 
     "url": "http://www.url.com"}] 
}​ 

여기에 제 코드가 있습니다. 나는 그것을 마침내 얻었습니다. (모두에게 감사드립니다!) 내가 원하는 가치 부분을 선택하십시오. 그런 다음 if/else 문에서 비교하려고 시도했지만 이상한 일을하고 있습니다. 첫째, 파일에 실제로 존재하는 것보다 더 많은 가치를 이끌어내는 것 같지만, 나는 그것에 대해 확실하지 않습니다. 둘째로, 그러나, 그것은 값을 비교하지 않는 것으로 보이지만, 하나의 값을 설정하면 다른 값과 동일하게 반복됩니다! 이해가 안돼! 나는 else{ } 섹션에서 뭔가를 할 때

var test = "34x25x36"; 
$(document).ready(function() { 
    $.ajax({ 
     dataType: 'json', 
     beforeSend: function() { 
      console.log('Before Ajax Request Starts !!'); 
     }, 
     success: function (data) { 
      console.log(data); 
      alert("Edddddddd"); 
      $.each(data.films, function (i, object) { 
       $.each(object, function (property, value) { 
        //alert(property + "=" + value); 
        for (i = 0; i < data.films.length; i++) { 
         var theFilm = (data.films[i].value); 
         if (theFilm == test) { 
          document.write(theFilm); 
          document.write(test + "<br>"); 
         } else {} 
        } 
       }); 
      }); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      alert("Error occurred: " + errorThrown); 
     }, 
     beforeSend: function() { 
      console.log('Ajax Request Complete !!'); 
     }, 
     url: 'test.php' 
    }); 
}); 

편집이

, 그것은 여러 번 제대로 판단과 일치하지 않는 모든 것을 실행하는 것 같다,하지만 다시 실행하는 것, 하나의 일치에 대한 텍스트를 실행 한 다음 "일치하지 않는"텍스트를 계속 실행합니다. else{} 섹션에 아무것도없는 경우 theFilm = test 값을 설정하는 것으로 보입니다. 도움!

성공 기능이 엉망
+1

많은 que 당신이 이곳에서 원하는 것처럼, 지침과 자주 묻는 질문을 따르는 한. :) – 0x499602D2

+0

사용하지 마십시오. document.write - DIV를 설정하고 innerHTML을 설정합니다. –

+0

글쎄, 내가 볼 수있는, 당신은 첫 번째 따옴표'''뒤에 두 줄 바꿈이 있습니다 .JSON에서 작동하는지 모르겠지만 일반 JS에서는 그렇지 않습니다. –

답변

1

.. ..

디버깅을 console.log 또는 알림을 사용합니다 .. 또한

문서에 기록하지 않습니다 .. 이제 당신이 많은 루프를 사용하여 혼란스러워지고 싶은 봐

모든 영화를 통해이 방법

success: function(data) { 
    console.log(data); 
    alert("Edddddddd"); 
    var keys = ["label", "value", "currently_streaming", "full_streaming_url", "url"] 
    for (i = 0; i < data.films.length; i++) { 
     for (j = 0; j < keys.length; j++) { 
      // alert('Key - ' + keys[j] + ' :: Value - ' + data.films[i][keys[j]]); 
      var theFilm = data.films[i][keys[j]]; 
      if (theFilm == test) { 
       alert('TheFilm Variable is : ' + theFilm); 
       alert('Test Variable is : ' + test); 
      } 
      else { 
       alert('No Match Found !!'); 
      } 
     } 
    } 
}​ 
+0

감사합니다! 작동하지 못했습니다. 단지 가치를 비교하기를 원한다는 것을 알고 있습니까? 그렇기 때문에 테스트의 가치는 가치 키의 값일뿐입니다. – USK

+0

나는 당신을 이해하지 못한다고 생각합니다. .. 좀 더 구체적으로 할 수 있니? –

0

당신은 루핑을 시도하고 그 내부에 각 영화의 모든 속성을 통해 반복된다. 그 다음에는 모든 영화를 다시 둘러보고 있습니다. 아무 이유없이 많은 반복입니다. 예를 들어 각각 5 개의 속성이있는 100 개의 필름이있는 경우 모든 필름을 500 회 반복하여 500 번 찾은 필름을 씁니다.

는 당신은 영화를 통해 루프 하나 개의 루프를 필요로 찾아 하나

$.each(data.films, function(i, object) { 
    var theFilm = object.value; 
    if (theFilm == test) { 
    document.write(theFilm); 
    } 
}); 

데모 :

var film = $.grep(data.films, function(f){ 
    return f.value == test; 
}); 
if (film.length == 1) { 
    document.write(film[0].value); 
} 
: http://jsfiddle.net/baJtf/

또한 배열에서 항목을 찾을 수있는 grep method을 사용할 수 있습니다

데모 : http://jsfiddle.net/baJtf/1/

관련 문제