2016-10-31 2 views
0

JSON과 함께 파일에서 값을 읽는 코드 조각이 있습니다. 전체 일치를 표시하고 모든 데이터를 보여주는 방식으로 필요한 결과를 표시합니다. 항상 내가 필요로하는 것이 아니야. 내가 CSV 파일로 출력 코드를 시작했지만, 데이터의 양 때문에이, JSON (참조 : This question을)에 따라서 스위치가 너무 느렸다JSON 부분 히트 결과 표시

다음 나는 JSON과 지금 가지고있는 코드입니다 같이

$(document).ready(function() { 
    var airports; //Prepare variable for storing JSON data 

    d3.json("airport.json", function(data) { 
     airports = data; //put the JSON data into an easy to call variable 
     continueCode(); //This is so we can use the JSON data outside of this call 
    }); 

    function continueCode(){ 
     var result; //Prepare result variable for usersearches 
     //User is typing in departure field 
     $(".input-leave").on("keyup paste", function(){ 
     $("#display").empty(); 
     //Grab user input 
    var userInput = $(".input-leave").val(); 
    if(userInput != ''){ 
     console.log("User input: "+userInput); 
     //console.log(airports[0]["Country Code"]); 
     for(var i=0; i<airports.length; i++){ 
     /* Prepare Variables for checking columns of JSON 
      cnCode = Country Code 
      ctCode = City Code 
      stCode = State Code 
      apCode = Airport Code 
      apName = Airport Name 
     */ 
     var cnCode = airports[i]["Country Code"], 
      ctCode = airports[i]["City Code"], 
      stCode = airports[i]["State Code"], 
      apCode = airports[i]["Airport Code"], 
      apName = airports[i]["Airport Name"]; 
     //Check if user input matches one of our variables 

     //This shows the airports on an exact match 
     if((userInput.toLowerCase() == cnCode.toLowerCase()) || (userInput.toLowerCase() == ctCode.toLowerCase()) || (userInput.toLowerCase() == stCode.toLowerCase()) || (userInput.toLowerCase() == apCode.toLowerCase()) || (userInput.toLowerCase() == apName.toLowerCase())){ 
      $("#display").append("Country Code: "+cnCode+", City Code: "+ctCode+", State Code: "+stCode+", Airport Code: "+apCode+", Airport Name: "+apName+"<hr>"); 
     } 

     //This results in every airport being shown at all times 
     if((userInput.toLowerCase().indexOf(cnCode.toLowerCase())) !== -1 || (userInput.toLowerCase().indexOf(ctCode.toLowerCase())) !== -1 || (userInput.toLowerCase().indexOf(stCode.toLowerCase())) !== -1 || (userInput.toLowerCase().indexOf(apCode.toLowerCase())) !== -1 || (userInput.toLowerCase().indexOf(apName.toLowerCase())) !== -1){ 
      $("#display").append("Country Code: "+cnCode+", City Code: "+ctCode+", State Code: "+stCode+", Airport Code: "+apCode+", Airport Name: "+apName+"<hr>"); 
     } 
     } 
    }else{ 
     $("#display").empty(); 
    } 
    }); 
} 
}); 

나는 지금 데이터를 읽는 2 가지 방법이 있습니다. 하나는 전체 문자열 일치로 데이터를 표시하고 다른 하나는 모든 문자열에 데이터를 표시하는 것입니다. 내가 필요한 것은 데이터가 부분 문자열에 표시되도록하는 것입니다 (예 : 사용자가 'Am'을 입력하면 모든 열에 'am'으로 시작하는 결과가 표시됨).

저는 여기와 Google에서 살펴 보았습니다.하지만 사용자가 입력을 보내고 결과가 ID와 이름과 같은 부분 데이터 만 표시하는 것이므로 데이터를 표시해야합니다. 사용자가 데이터를 삽입하여 나를 위해 작동하지 않는다면이 문제를 빠르고 쉽게 해결할 수 있습니까? 저를 위해 할 수있는 JSON 플러그인을 찾을 수 없었습니다. ElasticSearch에서 시도해 보았습니다.하지만 어떻게 시작해야하는지 잘 모르겠습니다.

답변

0

는이 Autocomplete Widget | jquery

기본 사용량이 소스 배열을 지정하는 것입니다 사용할 수 있습니다.

+0

자동 완성 ({ 출처 : 공항 }) '과 같이 시도했지만 결과가 계속 표시되지 않습니다. Jquery-UI를 사용하고 있습니다. 1.12.1 및 Jquery 1.12.4 –

+0

답변으로 [여기] (http://stackoverflow.com/questions/11435433/jquery-ui-autocomplete-with-json) _ 당신은 배열로 돌아갈 개체를 변환해야합니다 jQueryUI expects_ –

+0

당신의 대답과 주석에 기반하여 여러 가지를 시도했는데, 그 중 하나는 아무것도하지 않는 것처럼 보입니다.이 코드는'$ (". input-leave"). 자동 완성 ({minLength : 2 ($. grep (airports, function (item)), source : function (request, response) {var matcher = new RegExp ("^"+ $. ui.autocomplete.escapeRegex (request.term), "ig"); {return matcher.test (item);}));}});은 항상 False를 반환합니다. 어쩌면 내가 뭘 잘못하고 있는지 볼 수있는 예가 있을까요? –