0

카테고리가 undefined을 반환하는 이유는 무엇입니까?jQuery UI 자동 완성 카테고리가 표시되지 않음

항목을 받고 있지만 카테고리가 없습니다.

$.widget("custom.catcomplete", $.ui.autocomplete, { 
     _renderMenu: function(ul, items) { 
      var that = this, 
       currentCategory = ""; 
      $.each(items, function(index, item) { 
       if (item.category != currentCategory) { 
        ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>"); 
        currentCategory = item.category; 
       } 
       that._renderItemData(ul, item); 
      }); 
     } 
    }); 

    function split(val) { 
      return val.split(/,\s*/); 
     } 
     function extractLast(term) { 
      return split(term).pop(); 
     } 

    $("#people_q:not(.ui-autocomplete-input)").live("keyup", function (event) { 
     $(this).catcomplete({ 
      source: function (request, response) { 
       $.ajax({ 
        url: "/json/people_search.asp", 
        dataType: "json", 
        data: { 
         q:extractLast(request.term) 
        }, 
        success: function (data) { 
         response($.map(data.results.result, function (item) { 
          return { 
           label: item.sresult, 
           value: item.sresult 
          }; 
         })); 
        } 
       }); 
      }, 
      minLength: 2, 
      open: function() { 
       $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); 
      }, 
      close: function() { 
       $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); 
      }, 
       focus: function() { 
        // prevent value inserted on focus 
        return false; 
       }, 
       select: function(event, ui) { 
        var terms = split(this.value); 
        // remove the current input 
        terms.pop(); 
        // add the selected item 
        terms.push(ui.item.value); 
        // add placeholder to get the comma-and-space at the end 
        terms.push(""); 
        this.value = terms.join(", "); 
        return false; 
       } 
     }); 
    }); 

여기에는 자동 완성 피드에 사용되는 확인 된 유효한 Json이 나와 있습니다.

{ 
    "results": { 
     "count": "8", 
     "result": [ 
      { 
       "id": 0, 
       "sresult": "web development", 
       "category": "tag" 
      }, 
      { 
       "id": 1, 
       "sresult": "entrepreneur", 
       "category": "tag" 
      }, 
      { 
       "id": 2, 
       "sresult": "Talks/Presentations", 
       "category": "tag" 
      }, 
      { 
       "id": 3, 
       "sresult": "music management", 
       "category": "tag" 
      }, 
      { 
       "id": 4, 
       "sresult": "User Experience Design", 
       "category": "tag" 
      }, 
      { 
       "id": 5, 
       "sresult": "English", 
       "category": "tag" 
      }, 
      { 
       "id": 6, 
       "sresult": "French", 
       "category": "tag" 
      }, 
      { 
       "id": 7, 
       "sresult": "entier Associates Ltd", 
       "category": "company" 
      } 
     ] 
    } 
} 

답변

1

데이터 각 항목에 대한 category을 포함하지 않는 response 콜백을 공급하고 있습니다. 당신은 지금처럼 success 콜백을 변경 할 수 있어야한다 :

success: function (data) { 
    response($.map(data.results.result, function (item) { 
     return { 
      label: item.sresult, 
      value: item.sresult, 
      category: item.category // <----- 
     }; 
    })); 
} 
+0

전설적인 상태입니다. – chris