2014-05-23 2 views
0

FIDDLE에서 봐 주시기 바랍니다. B 항목이 문자열 allergyfree에 "글루텐"값이 없으면 -1을 반환하는 이유는 무엇입니까?

가 여기에 JSON 파일이다 :

[{"title":"A","allergyfree":"sugar,salt,yeast,wheat,gluten"},{"title":"B","allergyfree":"sugar,salt,starch,yeast,wheat,preservatives"}] 

스크립트 :

나는 값이 this thread에 존재하고 사람이 inArray 기능을 사용하여 제안 여부를 확인하는 문제가 있기 때문에 나는이 질문을
$.ajax({ 
    url: "url.json", 
    success: function (data) { 

     $(data.query.results.json.json).each(function (index, item) { 
     var title = item.title; 
     var allergyfree = item.allergyfree;   
     if(allergyfree.length !== 0) { 

      allergyfree = allergyfree.split(","); 

      $.each(allergyfree,function(i,allergy){ 

      $('.'+title+allergy).append(jQuery.inArray(allergy, allergyfree)); 

      }); 
      } 

     }); 
    }, 
    error: function() {} 
}); 

, 하지만 작동하지 않습니다.

+0

@WesleyMurch,이 값이 존재하지 않을 때 정말 숫자를 반환 여부를 확인하기 위해 단지 데모입니다. 이 문'if ($ .inArray (allergyfree)! = - 1)'이 예상대로 작동하지 않는 이유를 찾아야합니다. – RedGiant

답변

1

디버그 (또는 응답 만 보시면) 귀하의 ajax 요청이 Bgluten에 대한 항목을 반환하지 않는 것을 알 수 있습니다. 따라서 과 allergy의 조합에 대해서는 inArray이 호출되지 않습니다. 그것이 그 자리가 비어있는 이유입니다.

실제로 코드 결과는 inArray이 항목을 찾지 못하게합니다. 동일한 배열 내의 배열에서 각 요소를 검색하고 있습니다. 그래서 요소가 항상 명확하게 발견됩니다.


당신이 대신 일을해야 당신이 걱정하는 모든 알레르기의리스트를 반복 한 다음 요청의 결과 사람들을 확인하고 있습니다. 이런 식으로 뭔가 :

var allergies = ["gluten", "yeast"]; 

$.ajax({ 
    /* ... */ 

    $.each(allergies,function(i,allergy){ 
     $('.'+title+allergy).append(jQuery.inArray(allergy, allergyfree)); 
    }); 

    /* ... */ 
}); 

http://jsfiddle.net/cYFLe/119/

+0

감사합니다. if 문을 'if ($. inArray (allergyfree)! == null) {$ ('. '+ title + allergy) .html ('Yes ')} else {$ '.'+ title + allergy) .html ('No')}''글루텐 '이'B'에 없으면 "아니오"가 표시됩니다. – RedGiant

+1

@ user35295 당신이하려는 것을 수행하는 방법을 설명하는 대답이 업데이트되었습니다. –

관련 문제